前書き
コレクションを並べ替えるために私たちを必要とする多くのmanipultionsがあります。ゴーでソートパッケージを使用すると良い選択です、私たちは私たち自身で、多くのハードコードを避けることができます。ないPythonのように、並べ替え、我々が使用している各「リスト」に建てられた方法です。ゴーでは、ソートするために、いくつかの機能的な方法を使用します。そこインターネットdecribe上のいくつかの記事は、使用量があまりにも難しいですが、実際に行くには、私たちが話になるいくつかの簡単なアクセスを提供します。我々が開始する前に一つの簡単なメモは、パッケージ内の機能は、「並べ替え」のみスライスとのインタフェースデータを受け入れます。これは、我々は配列を使用していないことができます。
この記事では、についてお話します。
整数スライス([] int)をソートする方法1.。
フロートスライスをソートする方法2.([]のfloat64)。
3.どのように文字列のスライス([]の文字列)をソートします。
ソートされたスライスを逆にする方法4
整数スライスをソートする方法?
ゴーは、私たちはintergerスライスをソートするために)(関数呼び出しsort.Intsを構築しています。私たちは、他のコードを追加する必要はありません。
我々はsort.Intsを使用する必要があります注意してください()スタンドアロン。この関数は何の戻り値を持っていないし、それが元のスライス内の順序を並べ替えられますので。
メインパッケージ インポート( "FMT" ""ソート ) メイン(){FUNC := [] INT {2,5、2,9、0}リスト (オリジナルリスト: "リスト)fmt.Println" sort.Ints(リスト) fmt.Println( "ソート済みリスト:"、リスト) } //出力 オリジナルリスト:[2 5 2 9 0] ソートリスト:[0 2 2 5 9]
私たちは同じことを行うために別のオプションを持っています。型変換機能としての型sort.IntSliceを使用します。つまり、sort.IntSliceです()。
sort.IntSliceの力で、今、私たちは)(.Sortのように、それに接続されている方法では、多くのビルドをアセスすることができます。
我々はsort.IntSliceにスライスを変換した後にのみ、そして、我々はsort.Sort()関数に、それの値を渡すことができます。
この関数は、通常のスライスを受け入れるが、唯一のインタフェースデータを受け付けていません。定義文書とは、次のとおりです。FUNCソート(データインタフェース)。
sort.Stableは())(sort.Sortのような別の関数作品です。今のところ、我々はそれらを区別する必要はありません。
メインパッケージ のインポート( "FMT" "ソート" ) 主FUNC(){ //方法.Sort() リスト:= [] INT {2,5、2,9、0} sort.IntSlice(リスト).Sort() fmt.Println(リスト) //関数sort.Sort() LIST2:= [] INT {2,5、2,9、0} sort.Sort(sort.IntSlice(LIST2)) fmt.Println(LIST2) //機能sort.Stable() LIST3:= [] INT {2,5、2,9、0} sort.Stable(sort.IntSlice(LIST3)) fmt.Println(LIST3) } //出力 [0 2 2 5 9 ] [0 2 2 5 9] [0 2 2 5 9]
フロートスライスをソートする方法?
intergerの場合のように、移動は、他のコードなしで、()は私たちを助けるための関数呼び出しsort.Float64sを構築しています。
再び我々はsort.Float64s()スタンドアロンで使用する必要があります。この関数は、同様にノーリターン値を持っていません。
メインパッケージ のインポート( "FMT" "ソート" ) 、メイン(){FUNC リスト:= []のfloat64 {2.2、5.1、2、9、0} fmt.Println( "オリジナルリスト:"、リスト) sort.Float64s(リスト) fmt.Println( "オリジナルリスト:"、リスト) } //出力 オリジナルリスト:[2.2 5.1 2 9 0] オリジナルリスト:[0 2 2.2 5.1 9]
同じことを行うには別のオプションは、型変換関数sort.Float64Sliceを使用しています()。
sort.Float64Sliceの力で、我々はよくとして.Sort()methonとsort.Sort()関数を使用することができます。
メインパッケージ のインポート( "FMT" "ソート" ) 主FUNC(){ //方法.Sort() リスト:= []のfloat64 {2.2、5.1、2、9、0} sort.Float64Slice(リスト).Sort() fmt.Println(リスト) //関数sort.Sort() LIST2:= []のfloat64 {2.2、5.1、2、9、0} sort.Sort(sort.Float64Slice(LIST2)) fmt.Println(LIST2) //機能sort.Stable() LIST3:= []のfloat64 {2.2、5.1、2、9、0} sort.Stable(sort.Float64Slice(LIST3)) fmt.Println(LIST3) } //出力 [0 2 2.2 5.1 9 ] [0 2 2.2 5.1 9] [0 2 2.2 5.1 9]
どのように文字列のスライスを並べ替えるには?
驚くことではないが、まず私たちは、文字列のスライスをソートする機能sort.Strings()を持っています。
メインパッケージ のインポート( "FMT" "ソート" ) 、メイン(){FUNC := []の文字列{SS B " "Z"、 ""、 "F"、 "G"}" fmt.Println(「元の文字列を:」、SS) sort.Strings(SS) fmt.Println( "ソート列:"、SS) } //出力 元の文字列:[bzafg] ソート列:[abfgz]
第二に、我々はsort.StringSlice、それの方法を持っています。
メインパッケージ のインポート( "FMT" "ソート" ) 、メイン(){FUNC //方法.Sort() := []の文字列{SS B " "Z"、 ""、 "F"、 "G"を}" sort.StringSlice(SS).Sort() fmt.Println(SS) //関数sort.Sort() SS2:= []ストリング{ "B"、 "Z"、 ""、 "F"、 "G" } sort.Sort(sort.StringSlice(SS2)) fmt.Println(SS2) //関数sort.Stable() SS3:= []ストリング{ "B"、 "Z"、 ""、 "F"、 " G "} sort.Stable(sort.StringSlice(SS3)) FMT。 println(SS3) } //出力 [abfgz] [abfgz] [abfgz]
(減少ソートするか、どのように)ソートされたスライスを逆にするには?
我々は昇順で(defualtで)スライスをソートした後、アルゴリズム的に言えば、我々は特別に減少スライスを必要としません。
我々は漸減的にそれを作るされ、先頭に終わるからそれを使用することができBecuace。
しかし、いくつかのケースでは、この減少のスライスを持つことは便利になります。
sort.IntSlice / sort.FloatSlice / sort.StringSliceの助けを借りて、我々は機能sort.Reverse()を使用することができます。sort.Sort()はそれを受け入れ、結果が減少ソートされると、この関数は、インタフェースを返します。
ステートメントは、のがここhappendsか見てみましょう、そう単純ではありません。
メインパッケージ のインポート( "FMT" "ソート" ) 、メイン(){FUNC = [] INT {2,5、2,9、0}:リスト sort.Sort(sort.Reverse(sort.IntSlice(リスト))) FMTを.Println(リスト) } //出力 [9 5 2 2 0]
私たちは、あまりにも多くの層がある見ることができます。読みやすさは何とか弱めているが、それは知って良いことです。
概要
1.クイックスタート:利用sort.Ints()/ sort.Float64s()/ sort.Strings()。
2. sort.IntSlice / sort.FloatSlice / sort.StringSlice私たちの使用を拡張することができます。