1
私は(u32, u32)
タプルのベクトルを持っています。これは10 x 10グリッドの座標を表しています。座標はソートされていないと私は彼らのために、このようなソート機能を書いている:x/y座標のソートベクトル
vec.sort_by(|a, b| {
if a.0 > b.0 { return Ordering::Greater; }
if a.0 < b.0 { return Ordering::Less; }
if a.1 > b.1 { return Ordering::Greater; }
if a.1 < b.1 { return Ordering::Less; }
return Ordering::Equal;
});
標準sort
機能はまた、私が望んでいた結果が得られなかったので。私は数学的な座標グリッドに期待するとして、左下が(0/0)
で始める必要があるので、私が欲しいものではありません
(0/0) (0/1) (0/2) (0/3) (0/4) (0/5) (0/6) (0/7) (0/8) (0/9)
(1/0) (1/1) (1/2) (1/3) (1/4) (1/5) (1/6) (1/7) (1/8) (1/9)
(2/0) (2/1) (2/2) (2/3) (2/4) (2/5) (2/6) (2/7) (2/8) (2/9)
...
(9/0) (9/1) (9/2) (9/3) (9/4) (9/5) (9/6) (9/7) (9/8) (9/9)
:私のカスタム関数の結果のグリッドは、次のようになります。
ソートアルゴリズムに多くのケースを追加することはおそらく可能ですが、ブロックif .. return Ordering ...;
を作成する以外に、Rustで必要な処理を行う簡単な方法はありますか?
ありがとうございました、私が見落としている必要があります'sort_by_key'です。 – Max
私は '!y'は' -y'(これは基本的に '!y + 1'と同じです)よりも良い選択だと思います。符号付き整数の場合、 '-y'は' iN :: MIN'を間違ってソートします。符号なし整数の場合、 '-y'はコンパイル時エラーです(そうでなければ、0は正しくソートされません)。 –