L'Union et l'Intersection en PowerShell?
J'ai un tableau d'objets de la structure suivante:
structure Disk
{
int UID;
String Computer;
}
Un ordinateur peut avoir un tas de disques partagés, et un disque peut être partagée entre plusieurs ordinateurs.
Je veux trouver tous les disques commun à tous les ordinateurs. Par exemple, j'ai l'ordinateur A, B, et C; les Disques 1, 2, et 3.
La matrice de disques est {1,A}, {1,B}, {2},{2,B},{2,C},{3,}.
Le résultat que je veux doit être le disque 2, parce qu'il apparaît sur A, B, et C.
Est-il un moyen efficace pour y parvenir?
Avec de multiples boucles foreach c'est réalisable, mais certainement je veux une meilleure façon. Je suis en train de réfléchir opérations comme l'intersection, mais ne l'ai pas trouvé dans PowerShell.
- Je vous recommande de changer le titre pour "Union, Intersection et Différence / Jeu de Soustraction dans PowerShell". Donc, nous allons avoir toutes les opérations définies dans un seul endroit.
- Basé sur la question et suggestions ici, j'ai créé une fonction PowerShell à faire de l'Union, d'Intersection et Moins pour les objets. Check it out: sqljana.wordpress.com/2015/09/23/...
Vous devez vous connecter pour publier un commentaire.
En supposant
$arr
est le tableau, vous pouvez le faire comme ceci:En général, je l'approche de l'union et de l'intersection dans Powershell comme ceci:
Mais pour ce que vous demandez, la solution ci-dessus fonctionne bien et pas vraiment sur l'union et l'intersection de la définition standard des termes.
Mise à jour:
J'ai écrit pslinq qui fournit
Union-List
etIntersect-List
qui aident à atteindre l'ensemble de l'union et l'intersection avec Powershell.Vous pouvez également faire
Ne fonctionne pas si
$a
est nul si.Pour définir la soustraction (a - b):
$a | ?{ -not ($b -contains $_)}
Bien que cela ne fonctionne pas dans les premières versions, dans les versions plus récentes, vous pouvez simplement appeler l' .NET, LINQ fonctions d'extension directement, par exemple
(Sans le cast de certains énumérable type, PowerShell lance un "ne peut pas trouver de" surcharge d'erreur.)
Cela fonctionne bien dans PowerShell V4 et V5 et certainement ne pas en V2. Je n'ai pas un système à la main avec de la V3.