🎯

Dartのリストを昇順・降順に並び替える操作

2025/01/07に公開

💡Tips

Dartでリストを昇順・降順に並び替える操作をするときに、compareToというメソッドを使う。リストの操作が苦手なので調べてみた。

https://api.flutter.dev/flutter/dart-core/num/compareTo.html

基本的な使い方:

compareTo は2つの値を比較するためのメソッドです。
戻り値は整数で、以下の意味を持ちます:

  • 負の数(-1):呼び出し元が比較対象より小さい
  • 0:両者が等しい
  • 正の数(1):呼び出し元が比較対象より大きい

コード内での使用例:

昇順ソート(デフォルト)

..sort()  // 内部的に compareTo() を使用

降順ソート

..sort((a, b) => b.compareTo(a))

実際の動作:

数値の場合:

1.compareTo(2)  // -1を返す(1 < 2)
2.compareTo(1)  // 1を返す(2 > 1)
2.compareTo(2)  // 0を返す(2 = 2)

文字列の場合:

'a'.compareTo('b')  // -1を返す(aはbより前)
'b'.compareTo('a')  // 1を返す(bはaより後)
'a'.compareTo('a')  // 0を返す(同じ文字)

実行結果:

// sort()メソッドには、compareTo()メソッドを使用して、昇順にソートすることができます。
// これは、古い順(昇順)にソートするため、文字列の辞書的順序に基づいてソートされます。

void main() {
  // 数値のリストを作成
  final List<int> numbers = [1, 2, 3, 4, 4, 5, 6, 7, 8, 9];

  // 文字列のリストを作成
  final List<String> strings = [
    'a',
    'b',
    'c',
    'd',
    'e',
    'f',
    'g',
    'h',
    'i',
    'j',
  ];

  print('元の数値リスト: $numbers');
  print('元の文字列リスト: $strings');

  // 数値リストのソート
  final ascNumbers = List<int>.from(numbers)..sort(); // 古い順(昇順)
  final descNumbers = List<int>.from(numbers)
    ..sort((a, b) => b.compareTo(a)); // 新しい順(降順)

  print('\n数値リスト - 古い順(昇順): $ascNumbers');
  print('数値リスト - 新しい順(降順): $descNumbers');

  // 文字列リストのソート
  final ascStrings = List<String>.from(strings)..sort(); // 古い順(昇順)
  final descStrings = List<String>.from(strings)
    ..sort((a, b) => b.compareTo(a)); // 新しい順(降順)

  print('\n文字列リスト - 古い順(昇順): $ascStrings');
  print('文字列リスト - 新しい順(降順): $descStrings');
}

Listをソートするときに使うだろう。普段書いているコードでは使う機会がないので、他にも良い方法があればソートするロジックを考えてみたい。

Discussion