🧑‍🚀

【Dart】Listを複数値でsort

1 min read

flutter sortと検索すると公式ドキュメントが見つかりますが1つの値でsortする方法のみだったので
複数値を使うsortの方法を紹介します。

sortとComparatorを使用します。

ポイントになるのがcomareToメソッドで比較対象の値が同値,つまり0の時に次の値をチェックさせます。

https://api.flutter.dev/flutter/dart-core/List/sort.html
https://api.flutter.dev/flutter/dart-core/Comparator.html

値が一つの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

ログインするとコメントできます