Zum Inhalt wechseln


Foto

Powershell - Array sortieren


  • Bitte melde dich an um zu Antworten
4 Antworten in diesem Thema

#1 astalbold

astalbold

    Newbie

  • 11 Beiträge

Geschrieben 20. September 2012 - 10:11

Hallo,

ich arbeite mich gerade in Powershell ein und stoße bei einem Script auf ein Problem wo ich nicht weiß wie ich es lösen soll.

ich muss die folgenden zwei Werte einlesen. Die Werte sehen wie folgt aus:

23 Team15
55 Team20
12 Team30
02 Team32

Die Werte der ersten Spalte muss ich sortieren. Kleinste Wert zu erst und dann aufsteigend. Ausgeben muss ich aber den zweiten Wert (z.B. Team15).

Ich muss da doch mit einem multidimensionalen Array arbeiten, oder? Habe mir da schon mehrer sachen im Internet angesehen nur leider verstehe ich die noch nicht.
Hier im Board habe ich z.B. folgendes gefunden:
routine-sortieren-zweidimensionalen-arrays-157402.html
Aber das kapiere ich mal gar nicht...

ich hoffe mir kann hier jemand helfen und einen schubs in die richtige Richtung geben, danke.

AS

#2 Dukel

Dukel

    Board Veteran

  • 6.232 Beiträge

Geschrieben 20. September 2012 - 11:02

Du kannst eine Hashtable nutzen. Der Link zeigt auf eine VBS Lösung.
Unless your name is Google
Stop acting like you know everything

#3 astalbold

astalbold

    Newbie

  • 11 Beiträge

Geschrieben 21. September 2012 - 10:39

Danke, hab mal etwas gesucht und bin auf folgenden Artikel von Microsoft gestossen:

Windows PowerShell Tip: Working with Hash Tables

Mein Testcode sieht wie folgt aus:

$array = @{"Team20" = 10; "Team10" = 22; Team50 = 5}
$array.Add("Team30", 6)
$array.GetEnumerator() | Sort-Object Value

Das funktioniert soweit ganz gut aber woran ich jetzt scheiter sind vermutlich 2x Kleinigkeiten.

Nach dem sortieren ist das Array aber immer noch unsortiert, so könnte ich das ja nicht in einer foreach-Schleife verwenden.
Wie kann ich denn den ersten Wert z.B. ausgeben, habe dazu viele schreibweisen ($array[0,9] oder $array[0][1] usw.)gefunden, aber keine die mir die ersten beiden Werte ausgeben kann. Es gibt unter Powershell wohl viele verschiedene Arten von multi Arrays.

Ich muss nach dem sortieren den kleinsten Wert ausgeben, im Beispiel 5 mit Team50 und danach das ganze Array noch mit einer Foreach-Schleife komplett abarbeiten.

Bräuchte da noch mal einen Tipp/Hinweis...

Danke

AS

#4 Dukel

Dukel

    Board Veteran

  • 6.232 Beiträge

Geschrieben 21. September 2012 - 10:50

Du hast kein Array mehr sondern eine Hashtable.

($array.GetEnumerator() | Sort-Object Value)[0].Name

foreach($item in $array.GetEnumerator()){
#...
}

Windows PowerShell Tip: Working with Hash Tables

EDIT:
Statt
($array.GetEnumerator() | Sort-Object Value)[0].Name
geht auch
$array.GetEnumerator() | Sort-Object Value | Select-Object -First 1 -Property Name
. Das ist die "ausgeschriebene" Variante.

Bearbeitet von Dukel, 21. September 2012 - 11:16.

Unless your name is Google
Stop acting like you know everything

#5 astalbold

astalbold

    Newbie

  • 11 Beiträge

Geschrieben 21. September 2012 - 11:38

Vielen Danke Dukel, genau das war es...
Powershell ist gar nicht so leicht. :)