Dartではリストのソートが簡単にできます、この記事では、Dartでリストをソートする基本的な方法から、より複雑なソート方法までを詳しく解説します。
リストのソート
DartのListクラスにはsort()メソッドが用意されており、これを使ってリストの要素を簡単にソートできます。まずは、基本的なリストのソート手順について見ていきましょう。
基本的なリストのソート手順
リストをアルファベット順や数値の昇順でソートするには、以下のようにsort()メソッドを使用します。
List<int> numbers = [5, 3, 2, 9, 1];
numbers.sort();
print(numbers); // 出力: [1, 2, 3, 5, 9]
文字列リストをソートする場合も同様です。
List<String> words = ['banana', 'apple', 'orange'];
words.sort();
print(words); // 出力: ['apple', 'banana', 'orange']
このsort()メソッドはデフォルトで要素を昇順にソートします。
降順でソートする方法
リストを降順にソートする場合、sort()メソッド内で比較関数をカスタマイズする必要があります。
List<int> numbers = [5, 3, 2, 9, 1];
numbers.sort((a, b) => b.compareTo(a));
print(numbers); // 出力: [9, 5, 3, 2, 1]
この例では、sort()メソッドに渡された比較関数b.compareTo(a)により、要素が降順にソートされています。
オブジェクトの特定のプロパティでソートする方法
オブジェクトのリストを特定のプロパティでソートする場合、sort()メソッド内でカスタム比較関数を定義する必要があります。ここでは、Personクラスのインスタンスのリストをageプロパティでソートする方法を示します。
void main() {
  List<Person> people = [
    Person('Alice', 24),
    Person('Bob', 30),
    Person('Charlie', 28),
  ];
  // ageでソート
  people.sort((a, b) => a.age.compareTo(b.age));
  print(people); // 出力: [Alice, age 24, Charlie, age 28, Bob, age 30]
}
複数条件でソートする方法
複数の条件でリストをソートする場合、カスタム比較ロジックをsort()メソッドに提供することで実現できます。例えば、オブジェクトのリストを年齢でソートし、年齢が同じ場合は名前でソートする場合は以下のようにします。
class Person {
  String name;
  int age;
  
  Person(this.name, this.age);
  
  
  String toString() => '$name: $age';
}
void main() {
  List<Person> people = [
    Person('John', 28),
    Person('Jane', 31),
    Person('John', 31),
    Person('Mary', 24)
  ];
  people.sort((a, b) {
    int ageDiff = a.age.compareTo(b.age);
    if (ageDiff == 0) {
      return a.name.compareTo(b.name);
    }
    return ageDiff;
  });
  print(people); // 出力: [Mary: 24, John: 28, Jane: 31, John: 31]
}
このコードでは、まずageで比較し、ageが同じ場合にはnameで比較しています。これにより、複数の条件を持つソートが可能になります。
まとめ
Dartでのリストソートは、単純な数値や文字列のリストから、複雑なオブジェクトのリストまで幅広く対応しています。sort()メソッドを適切に利用することで、データの整理や検索効率を大幅に向上させることが可能です。

0 件のコメント:
コメントを投稿