it-swarm.com.de

Zeigen Sie ein sortiertes Array an

Wie erstelle ich eine Funktion ("sortarr"), die einen Parameter von array verwendet und ein sortiertes Array zurückgibt?

Shell-Skript

echo "Original Numbers in array:"
for (( i = 0; i <= 4; i++ ))
do
  echo ${nos[$i]}
done
4
Brandi Edwards

Das tust du nicht. Sie verwenden sort:

$ echo ${array[@]}
1 8 14 -4 123 12

$ printf '%s\n' "${array[@]}" | sort -n
-4
1
8
12
14
123

Und um es zu einer Funktion zu machen:

mysort(){
    printf '%s\n' "[email protected]" | sort -n
}
array=(1 8 14 -4 123 12)
mysort "${array[@]}"

Wenn Sie wirklich wollen, können Sie versuchen, einen Sortieralgorithmus in bash zu implementieren. Es könnte einfacher sein, stattdessen ein paar Mal mit dem Kopf gegen die Wand zu schlagen. Sie möchten so etwas wirklich nicht in einer Shell-Sprache schreiben. Dennoch, wenn Sie darauf bestehen, könnten Sie so etwas verwenden (neu implementiert in bash aus einem der Beispiele hier ):

mysort(){
    for((i=${#array[@]}-1;i>=0; i--)); do
        for((j=1;j<=$i; j++)); do
            if [[ ${array[j-1]} -gt ${array[j]} ]]; then
                temp="${array[j-1]}"
                array[j-1]="${array[j]}"
                array[j]="$temp"
            fi
        done
    done
}
declare -a array=(1 8 14 -4 123 12)
mysort $array
printf '%s\n' "${array[@]}"

Aber im Ernst, ich wiederhole nicht, versuchen Sie, eine ernsthafte Rechenaufgabe in der Shell zu erledigen. Es gibt bessere Werkzeuge dafür. Jede halbwegs anständige Skriptsprache verfügt beispielsweise bereits über Methoden, mit denen Sie sortieren können. Zum Beispiel:

  • Perl

    $ Perl -le '@array=(1,8,14,-4,123,12); print join " ", sort @array'
    -4 1 12 123 14 8
    
  • Python

    $ python -c 'array = [1,8,14,-4,123,12]; array.sort(); print(array)'
    [-4, 1, 8, 12, 14, 123]
    
5
terdon

Erstellen Sie eine Funktion namens Sortieren,
die Liste durchlaufen,
Funktionseingabe erhalten,
Echolisteneintrag,
übergebe die Schleifenausgabe zum Sortieren.
Speichern Sie die Ausgabe in einer neuen Liste mit dem Namen sortierte Liste.

Sort()
  {
    for item in [email protected]; 
      do 
        echo $item; 
      done | 
    sort
   }

list=( Item3 Item1 Item2 )

sortedlist=$(Sort ${list[@]})

echo ${sortedlist[@]}
0
FireInTheSky