🧑🚀
【Dart】Listを複数値でsort
Flutter sort と検索すると公式ドキュメントが見つかりますが 1 つの値で sort する方法のみだったので
複数値を使う sort の方法を紹介します。
sort と Comparator を使用します。
ポイントになるのが comareTo メソッドで比較対象の値が同値,つまり 0 の時に次の値をチェックさせます。
値が一つの sort
var values = [1, 2, 3, 4, 4, 1];
values.sort(
(a, b) {
return a.compareTo(b);
},
);
// 結果 [1, 1, 2, 3, 4, 4]
2 次元配列の sort
var values = [
[1, 2],
[1, 1],
[2, 1],
[1, 4],
[2, 2],
[1, 3],
];
values.sort(
(a, b) {
return a[0].compareTo(b[0]);
},
);
// 結果 [[1, 2], [1, 1], [1, 4], [1, 3], [2, 1], [2, 2]]
// 一つ目の値でしかチェックしていないので1つ目はソートできてるけど2つ目は配列順になっている
値を 2 つ使う sort
var values = [
[1, 2],
[1, 1],
[2, 1],
[1, 4],
[2, 2],
[1, 3],
];
values.sort(
(a, b) {
int result = a[0].compareTo(b[0]);
if (result != 0) return result;
return a[1].compareTo(b[1]);
},
);
// 結果 [[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2]]
値を 3 つ使う sort
var values = [
[1, 2, 0],
[1, 1, 2],
[2, 1, 3],
[1, 3, 3],
[2, 2, 1],
[1, 1, 1],
[1, 3, 2],
];
values.sort(
(a, b) {
int result1 = a[0].compareTo(b[0]);
if (result1 != 0) return result1;
int result2 = a[1].compareTo(b[1]);
if (result2 != 0) return result2;
return a[2].compareTo(b[2]);
},
);
// 結果 [[1, 1, 1], [1, 1, 2], [1, 2, 0], [1, 3, 2], [1, 3, 3], [2, 1, 3], [2, 2, 1]]
Discussion