👨‍💻

【Flutter】業務でよく使う List / Map / Set 操作

に公開

Flutterアプリ開発で日常的に使うデータ構造「List」「Map」「Set」
この記事では、業務で頻出する処理に絞って、実際のコード例をもとに解説します

List について

以下で生成したListに関して説明していく

final list = List.generate(10, (i) => i + 1);
print(list); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

抽出系

【where】 条件に一致する要素をすべて取得

final evenNumbers = list.where((i) => i % 2 == 0).toList();
print(evenNumbers); // [2, 4, 6, 8, 10]

【firstWhere】 最初に一致する要素を取得(必ず存在する場合)

final oddMinimumNumber = list.firstWhere((i) => i % 2 == 1);
print(oddMinimumNumber); // 1

【firstWhereOrNull】 最初に一致する要素を取得(存在しない可能性あり)

firstWhereOrNull()はDart標準には用意されていないため、collectionパッケージをimportする必要があります

final oneHundred = list.firstWhereOrNull((i) => i == 100);
print(oneHundred ?? 'No exists'); // No exists

変換系

【map】 int → String への変換

final stringNumber = list.map((i) => '$i').toList();
print(stringNumber.runtimeType); // List<String>

検索系

【any】 特定の値が存在するか確認

final isExist = list.any((item) => item == 3);
print(isExist); // true

更新・削除系

【add】 要素の追加

list.add(99);
print(list); // [1, 2, ..., 10, 99]

【addAll】 複数要素の追加

final addList = [11, 22, 33, 44, 55, 66, 77, 88, 99];
list.addAll(addList);
print(list); // [1, 2, ..., 10, 11, ..., 99]

【removeWhere】 条件に一致する要素を全て削除

final deletedOverFive = [...list];
deletedOverFive.removeWhere((i) => i > 5);
print(deletedOverFive); // [1, 2, 3, 4, 5]

並べ替え系

【sort】 降順にソート

final fromUpToDown = [...list];
fromUpToDown.sort((a, b) => b.compareTo(a));
print(fromUpToDown); // [10, 9, ..., 1]

Mapについて

Listに対してmap()で変換し、indexも取得する

class User {
  final String name;
  final int age;

  const User({required this.name, required this.age});
}

List<User> users = [
  User(name: 'yamada', age: 18),
  User(name: 'suzuki', age: 32),
  User(name: 'hogehoge', age: 12),
];

users
  .asMap()
  .entries
  .map((entry) {
    int index = entry.key;
    User user = entry.value;
    return '$index : ${user.name}${user.age}';
  })
  .toList()
  .forEach(print);
// 出力:
// 0 : yamada18
// 1 : suzuki32
// 2 : hogehoge12

Setについて

過去参画したプロジェクトで使用する頻度は少なかったが、便利そうなSet操作について紹介

【union】 和集合(A⋃B)

final setA = {1, 2, 3, 4};
final setB = {3, 4, 5, 6};
final addSetAB = setA.union(setB);
print(addSetAB); // {1, 2, 3, 4, 5, 6}

【difference】 差集合(A\B)

final setAWithoutSetB = setA.difference(setB);

【intersection】 積集合(A ∩ B)

final commonPartOfSetAB = setA.intersection(setB);
print(commonPartOfSetAB); // {3, 4}

Listの重複削除

Setの性質を利用することで、Listの重複を削除する
処理の概要としては、ListをSetに変換後、再度Listに変換する

final duplicatedNumberList = [
  1, 2, 7, 5, 6, 3, 4, 1, 1, 3, 2, 7, 8, 5, 4, 9,
];
final numberSet = duplicatedNumberList.toSet();
final noDuplicatedNumberList = numberSet.toList();
print(noDuplicatedNumberList); // [1, 2, 7, 5, 6, 3, 4, 8, 9]

まとめ

今回の内容は、業務でよく使うList, Map, Setの操作を網羅しています

  • List
    • 条件抽出、変換、検索、追加・削除、並べ替え
  • Map
    • インデックス付き変換
  • Set
    • 集合演算、重複削除

どれも日常的なデータ処理に役立つ基本操作です。必要な場面で思い出せるよう、活用していただけると幸いです
他の操作で使うものがあれば、ぜひコメント欄までよろしくお願いします

Discussion