Das gezackte PowerShell-Array verliert eine Dimension, wenn nur ein Element vorhanden ist

8

Ich habe die folgende PowerShell-Funktion, die für jede Eingabe mit Ausnahme von 1 gut funktioniert. Wenn ich eine Eingabe von 1 übergebe, wird ein Array mit zwei Elementen 1,1 anstelle eines einzelnen Elements zurückgegeben, das selbst ein Array von zwei Elementen (1,1) ist.

Irgendwelche Ideen, wie PowerShell ein gezacktes Array mit einem Element zurückgibt, das selbst ein Array ist?

%Vor%

Hier ist mein Test und es zeigt das Problem an. Sie können sehen, dass das erste Beispiel (1 als Eingabe) eine Länge von 2 zurückgibt, obwohl nur ein Faktorpaar gefunden wurde. Das zweite Beispiel (6 als Eingabe) funktioniert ordnungsgemäß und gibt eine Länge von 2 mit zwei gefundenen Faktorpaaren zurück.

%Vor%     
Eric Schoonover 07.09.2009, 19:59
quelle

2 Antworten

12

Ich habe das auf dem PowerShell V2 CTP unter Windows XP getestet und habe die gleichen Ergebnisse wie das OP gesehen.

Das Problem scheint darin zu bestehen, dass PowerShell die Sammlungen "abflacht", wenn sie entlang der Pipeline weitergeleitet werden. Eine einfache Lösung besteht darin, den Rückgabewert in eine Auflistung einzuschließen, indem der mit dem Komma-Operator zurückzugebende Ausdruck vorangestellt wird:

%Vor%

Siehe Blogeintrag von Keith Hill Effektive PowerShell Item 8: Ausgabekardinalität - Skalare, Sammlungen und leere Sätze - Oh My! für ein wenig mehr Details.

Hoffe, das hilft.

    
Dan Blanchard 07.09.2009, 21:39
quelle
5

Sie sind nah dran. Das Problem besteht darin, dass PowerShell das Array abrollt (flacht), wenn es von der Funktion zurückgegeben wird. Verwenden Sie den Komma-Operator, um das Array unverändert zurückzugeben, ohne es abzurollen:

%Vor%

Wenn nur ein Element im Array vorhanden ist, was bei den Eingängen 1,2,3 und anderen Primzahlen der Fall ist, entrollt PowerShell den Inhalt des Arrays in die Ausgabe, sodass jedes Element (1,1) auf der Ausgabe erscheint . Warum PowerShell in diesem Fall sowohl das äußere als auch das innere Array abrollt - ich weiß es nicht genau. Ich vermute, dass sie es tun, weil es Szenarien gibt, in denen Leute dieses Verhalten von PowerShell erwarten würden.

    
Keith Hill 07.09.2009 21:44
quelle

Tags und Links