Dart(Flutter)でリストのソートをする方法を解説!基本のソートから複数条件のソートまで

2024年7月13日土曜日

Flutter

t f B! P L

enter image description here

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()メソッドを適切に利用することで、データの整理や検索効率を大幅に向上させることが可能です。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ