👨💻
【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