例 1: Golang でスライスを昇順に並べ替える
「sort.Slice()」関数は、スライスの要素を昇順または降順に並べ替えるGoの最重要関数です。スライスが昇順に配置されている次の図を考慮してください。
パッケージ 主要輸入 (
「fmt」
'選別'
)
機能 主要 () {
偶数スライス := [] 整数 { 10 、 2 、 8 、 4 、 0 、 6 }
fmt 。 プリントイン ( 「未分類のスライス:」 、 偶数スライス )
選別 。 スライス ( 偶数スライス 、 機能 ( 私 、 j 整数 ) ブール {
戻る 偶数スライス [ 私 ] < 偶数スライス [ j ]
})
fmt 。 プリントイン ( 「ソートされたスライス:」 、 偶数スライス )
}
main() 関数の先頭で、{10, 2, 8, 4, 0, 6} 値を使用して EvenSlice スライスを定義します。このスライスは、最初は並べ替えられていない偶数のコレクションを表します。 EvenSlice スライスをソートするには、スライスで sort.Slice() 関数を使用します。 sort.Slice() 関数内では、ソート関数が引数として提供されます。この関数は、スライスの 2 つの要素をインデックス「i」と「j」で比較することによって並べ替え順序を決定します。 EvenSlice[i] が EvenSlice[j] より小さい場合、true を返します。それ以外の場合は false を返します。 sort.Slice() 関数は、この比較関数を使用して、「evenSlice」スライスの要素を昇順に並べ替えます。
スライスを昇順にソートした結果が、次の出力画面に生成されます。
例 2: Golang ソートパートスライス
次に、Go の sort.Slice() 関数を使用して、指定したスライスのサブスライスに昇順で並べ替えが適用されます。
パッケージ 主要
輸入 (
「fmt」
'選別'
)
機能 主要 () {
n := [] 整数 { 9 、 7 、 3 、 5 }
始める := 0
終わり := 3
選別 。 スライス ( n [ 始める : 終わり ]、 機能 ( 私 、 j 整数 ) ブール {
戻る n [ 始める + 私 ] < n [ 始める + j ]
})
fmt 。 プリントイン ( n )
}
最初に、[9、7、3、5] の値を使用して「n」スライスを作成します。さらに、2 つの変数「start」と「end」はそれぞれ 0 と 3 に設定されます。これらの変数は、ソートされる「n」スライス内のインデックスの範囲を定義します。次に、サブスライス「n[start:end]」を最初の引数として「sort.Slice()」関数が呼び出されます。このサブスライスには、指定された範囲内の「n」の要素が含まれます。その後、sort.Slice() 関数内の 2 番目の引数としてソート関数が与えられます。
ここで、その関数はサブスライス内の要素を表す 2 つのインデックス「i」と「j」を受け取ります。サブスライス内の要素を比較するために、並べ替え関数は start メソッドを使用して元のスライス内の対応する要素にアクセスします。次に、sort.Slice() 関数は、提供された並べ替え関数を使用して、サブスライス内の要素を昇順に並べ替えます。
次の出力は、指定された範囲 (start から end-1) 内の要素が並べ替えられ、範囲外の要素は変更されないことを示しています。
例 3: Sort.Ints() 関数を使用した Golang の整数スライスの並べ替え
さらに、整数のスライスを並べ替えるのに最も便利なのは、カスタム 並べ替えメソッドを実装する必要のない sort.Ints() 関数です。これは整数スライスに直接作用し、インプレース並べ替えを実行します。次のプログラムは、指定された整数を並べ替えます。
パッケージ 主要輸入 (
「fmt」
'選別'
)
機能 主要 () {
IntSlice := [] 整数 { 10 、 13 、 15 、 十一 、 14 、 12 }
fmt 。 プリントイン ( 「未分類のスライス:」 、 IntSlice )
選別 。 整数 ( IntSlice )
fmt 。 プリントイン ( 「ソートされたスライス:」 、 IntSlice )
}
まず、最初はソートされていない整数のコレクションを表す [10, 13, 15, 11, 14, 12] 値を使用して「IntSlice」スライスを宣言し、初期化します。次に、「IntSlice」スライスを引数としてsort.Ints()関数を呼び出し、「IntSlice」をソートします。この場合の sort.Ints() 関数は、最適化された並べ替えアルゴリズムに従ってスライスのすべての部分を内部的に並べ替えます。元のスライスを直接変更し、その要素をソートされた順序に並べ替えます。
次の出力は、最初に並べ替えられていないスライスが表示され、その後に並べ替えられたスライスが表示されることを示しています。
例 4: Golang ソート文字列スライス
Go は、文字列のスライスを特定の順序でソートするために使用される、sort パッケージの sort.Strings() 関数も提供します。ここで、次のプログラムは文字列のスライスを並べ替えるのに役立ちます。
パッケージ 主要輸入 (
「fmt」
'選別'
)
機能 主要 () {
strSl := [] 弦 { 「ゴラン」 、 「パイソン」 、 「ジャワ」 、 「パール」 、 「タイプスクリプト」 }
選別 。 文字列 ( strSl )
fmt 。 プリントイン ( strSl )
}
まず、ソートされていない ['golang'、'python'、'java'、'perl'、'typescript'] 値を含む 'strSl' スライスを確立しました。その後、スライスの要素を辞書順に並べ替える sort.Strings() 関数を使用して、「strSl」スライスを並べ替えます。この関数は、元のスライスを直接変更し、その要素を ASCII 値に基づいてソートされた順序に再配置します。
出力では、次のように文字列スライスが昇順で並べ替えられます。
例 5: IntAreSort() 関数を使用した Golang のソート スライスのチェック
ただし、Go の sort.IntsAreSorted() 関数を使用すると、指定された整数のスライスが昇順でソートされているかどうかを確認できます。指定されたスライスに対する IntAreSort() 関数の次のプログラム例を考えてみましょう。
パッケージ 主要輸入 (
「fmt」
'選別'
)
機能 主要 () {
sl := [] 整数 { - 33 、 105 、 - 42 、 59 、 18 、 0 、 - 3 }
fmt 。 プリントイン ( 「スライス:」 )
fmt 。 プリントイン ( 「未分類のスライス:」 、 sl )
結果 := 選別 。 IntsAreSorted ( sl )
fmt 。 プリントイン ( 」 \n 結果:' )
fmt 。 プリントイン ( 「指定されたスライスはソートされていますか?:」 、 結果 )
}
まず、ソートされていないランダムな整数のスライスを「sl」として定義します。このスライスには、特定の順序ではない整数のコレクションが含まれています。次に、sort.IntsAreSorted() 関数を呼び出し、「sl」スライスを引数として渡します。この関数は、スライス入力が昇順に配置されているかどうかを示すブール値の結果を提供します。次に、 fmt.Println() 関数は、返されたブール値に基づいて指定されたスライスがソートされているかどうかを出力する結果を出力します。
出力では、整数のスライスがソートされていないため、ソート順序が false と表示されます。
例 6: Golang 逆ソート スライス
さらに、Go のsortパッケージのsortReverse()関数とsortStringSlice()関数を使用すると、文字列のスライスを逆ソートできます。次のプログラムは、sort.Reverse() 関数の動作を示しています。
パッケージ 主要輸入 (
「fmt」
'選別'
)
機能 主要 () {
母音スライス := [] 弦 { 「そうですよ」 、 「あ」 、 '私' 、 'の' 、 「お」 }
fmt 。 プリントイン ( 「並べ替え前:」 、 母音スライス )
選別 。 選別 ( 選別 。 逆行 ( 選別 。 文字列スライス ( 母音スライス )))
fmt 。 プリントイン ( 「並べ替え後:」 、 母音スライス )
}
まず、母音「e」、「a」、「i」、「u」、および「o」を含む「vowelSlice」文字列のスライスを定義します。指定された文字列スライスの初期コンテンツは、最初に「print」関数を使用して出力されます。次に、sort.Reverse() 関数と sort.StringSlice() 関数を引数として指定した sort.Sort() 関数を使用して並べ替え操作が実行されます。ここで、「sort.Reverse()」は要素の順序を逆にする新しい型を作成します。これは、引数として「sort.StringSlice」タイプを受け取り、母音スライスをソート可能なタイプに変換します。
ここの出力では、母音が逆アルファベット順に表示されます。
結論
提供されたスライスを並べ替える例を使用して、さまざまな並べ替え関数を詳しく説明しました。サブスライスのソートと、スライスがすでにソートされているかどうかの確認についても説明しました。したがって、ソート パッケージの機能を活用して、Go プロジェクトにおける幅広いソートの課題に取り組むことができます。