Rustでベクトルをソートする方法は?


回答:


92

全順序の要素の可変スライスにはsortメソッドがあります。

Vec<T>実装しているためDerefMut<[T]>、このメソッドをベクトルで直接呼び出すことができ、vector.sort()機能します。


Tタイプの要件は何ですか?「Vec <MyType>は 'sort'という名前のスコープにメソッドを実装していません」というエラーが表示されます。これは、MyTypeにいくつかのトレイトを実装しなかったことが原因である可能性があります。これまで、cmp :: PartialEqとcmp :: PartialOrdがあります。
マキシムスロイコ2014年

9
ありますsort_by、完全にカスタム述語を可能にあまりにも方法が。
huon 2014年

9
ドキュメントが言うように、self.sort()== self.sort_by(|a, b| a.cmp(b))
クリスモーガン

1
.sort()タイプTcmp::Ordトレイトを実装している場合は、呼び出すことができます。
Simon Zyx 2018年

1
sort_unstable少し速いことも確認できますが、「等しい」要素を並べ替えることができます
Bogdan Mart

1

上で提案されたソリューションは整数のベクトルをソートできますが、フロートのベクトルをソートする際に問題がありました。

最も簡単な解決策は、より速いソートクレートを使用することでしたフロートを並べ替えることもできる。クイックソートクレートは、任意のタイプの他のベクトルをソートすることもでき、比較(sort_by)を使用してソートするメソッドも実装します。

以下はRustコードです:

extern crate quickersort;
//let's create the vector with the values
let mut vals = Vec::new();
vals.push(31.2);
vals.push(31.2);
vals.push(10.0);
vals.push(100.4);
vals.push(4.1);
quickersort::sort_floats(&mut vals[..]); // sort the vector

11
フロートを並べ替えるためだけに別のクレートは必要ありませんv.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))。たとえば、フロートで機能する必要があります。(配列内のNaNで何をしたいかに応じて、より注意深い比較関数を作成できます。)
user4815162342 2017

4
フロートのベクトルの並べ替えに問題がありました。そのため、その特定の問題専用の質問と回答がすでにすべてあります(stackoverflow.com/q/26489701/155423stackoverflow.com/q/28247990/155423stackoverflow.com/q/ 37127209/155423)。
シェップマスター2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.