【Dart】List,Set,Mapの便利な関数
List,Set,Mapの基本的な話は、【Dart】List,Set,Mapの作り方を参照してください。
すべての関数確認ではなく、便利と感じたものをピックアップし、実行結果とともに確認します。
【Dart】List,Set,Map(コレクション)の関数
はじめに
- 
【参考】公式サイト
 - 
実行環境
- 
DartPadやAndroid Studio等で実行※パッケージ利用や、実行時エラー確認はIDE
- Dart SDK 2.10.4
 
 
 - 
DartPadやAndroid Studio等で実行※パッケージ利用や、実行時エラー確認はIDE
 - 
確認の流れ
- 実行確認
- そのコレクション自体への追加・削除・変更・確認・
 - 別のコレクションとする変換
 - 組み合わせ
 
 - 上記についてListに対して確認後、Set, MapについてもListと同様に確認
- Listには存在するが、Set, Mapには存在しないものや、追加されたものをメモ
 
 
 - 実行確認
 
List
追加
- 
add関数- 要素を末尾へ追加
 
 
void main() {
  final list = <String>[];
  list.add('Apple');
  print(list);
}
実行結果
[Apple]
- 
addAll関数- コレクション(List)の中身すべてを要素として末尾へ追加
 
 
void main() {
  final list1 = ['Apple'];
  final list2 = ['Strawberry', 'Peach'];
  list1.addAll(list2);
  print(list1);
}
実行結果
[Apple, Strawberry, Peach]
- 
insert関数- 指定した位置に要素を追加 ※指定位置にもともと存在した要素は、追加要素の後ろとなる
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.insert(1, 'Banana');
  print(list);
}
実行結果
[Apple, Banana, Strawberry, Peach]
- 
insertAll関数- 指定した位置にコレクション(List)の中身すべてを要素として追加
 
 
void main() {
  final list1 = ['Apple'];
  final list2 = ['Strawberry', 'Peach'];
  list1.insertAll(0, list2);
  print(list1);
}
実行結果
[Strawberry, Peach, Apple]
削除
- 
remove関数- 指定した値の要素を削除 ※複数同じ値がある場合は、最初の要素のみ削除
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.remove('Strawberry');
  print(list);
}
実行結果
[Apple, Peach]
- 
removeAt関数- 指定した位置の要素を削除
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.removeAt(1);
  print(list);
}
実行結果
[Apple, Peach]
- 
removeLast関数- 最後の要素を削除
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.removeLast();
  print(list);
}
実行結果
[Apple, Strawberry]
- 
removeRange関数- 指定したstart位置からend位置までの要素を削除
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.removeRange(1, list.length);
  print(list);
}
実行結果
[Apple]
- 
removeWhere関数- 指定された条件の要素を削除
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.removeWhere((String value) => value.length > 5);
  print(list);
}
実行結果
[Apple, Peach]
変更
- 
sort関数- 引数として渡す
compare関数によってソート ※省略した場合は、Comparable.compareとなる 
 - 引数として渡す
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.sort((a, b) => a.length.compareTo(b.length));
  print(list);
}
実行結果
[Apple, Peach, Strawberry]
- 
shuffle関数- 要素をランダムに並べ替える
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.shuffle();
  print(list);
}
実行結果
[Apple, Peach, Strawberry]
※ランダムに出現した一例
確認
- 
forEach関数 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  list.forEach(print);
}
実行結果
Apple
Strawberry
Peach
- 
elementAt関数- 値確認
 - 範囲外を指定すると、実行時エラー(RangeError )となる
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.elementAt(0));
  print(list.elementAt(1));
  print(list.elementAt(2));
}
実行結果
Apple
Strawberry
Peach
- 
indexOf関数- 位置確認(値による検索)
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.indexOf('Apple'));
  print(list.indexOf('Strawberry'));
  print(list.indexOf('Peach'));
  print(list.indexOf('Banana'));
}
実行結果
0
1
2
-1
- 
lastIndexOf関数- 位置確認(値による検索)※後ろから検索
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach', 'Apple'];
  print(list.lastIndexOf('Apple'));
  print(list.lastIndexOf('Apple', 0));
  print(list.lastIndexOf('Strawberry', 0));
}
実行結果
3
0
-1
- 
lastIndexWhere関数- 位置確認(bool値を返す関数による検索)※後ろから検索
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach', 'Apple'];
  print(list.lastIndexWhere((item) => item == 'Apple'));
  print(list.lastIndexWhere((item) => item == 'Apple', 0));
  print(list.lastIfndexWhere((item) => item == 'Strawberry', 0));
  print(list.lastIndexWhere((item) => item.startsWith('P')));
}
実行結果
3
0
-1
2
- 
firstWhere関数- 値確認(bool値を返す関数による検索)※最初の一致
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach', 'Apple'];
  print(list.firstWhere((item) => item == 'Apple'));
  print(list.firstWhere((item) => item.startsWith('P')));
  print(list.firstWhere((item) => item == 'Banana',
      orElse: () => 'Banana Nothing'));
}
実行結果
Apple
Peach
Banana Nothing
- 
contains関数 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.contains('Apple'));
  print(list.contains('Banana'));
}
実行結果
true
false
- 
every関数- コレクションのすべての要素が指定された条件を満たせばtrueを返す
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.every((String value) => value.length > 0));
  print(list.every((String value) => value.length > 10));
}
実行結果
true
false
- 
where関数- 与えた条件を満たす要素を持つコレクションを返す
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.where((String value) => value.length > 0));
  print(list.where((String value) => value.length > 10));
}
実行結果
(Apple, Strawberry, Peach)
()
変換(値として渡す用)
- 
toList/toSet関数- 各オブジェクトとする ※以下ListにtoListを利用した場合は、中身の同じの別オブジェクトを作成
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.toList());
  print(list.toSet());
}
実行結果
[Apple, Strawberry, Peach]
{Apple, Strawberry, Peach}
- 
join関数- 各要素の間に指定の文字を入れたStringを返す
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.join(','));
}
実行結果
Apple,Strawberry,Peach
- 
asMap関数- ListからMapへ
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  final map = list.asMap();
  print(map);
}
実行結果
{0: Apple, 1: Strawberry, 2: Peach}
- 
followedBy関数- このList(コレクション)と別のList(コレクション)に連結させて、パラメータとして渡す
 - ※
Iterable<String>となる 
 
void main() {
  final list1 = ['Apple'];
  final list2 = ['Strawberry', 'Peach'];
  print(list1.followedBy(list2));
}
実行結果
(Apple, Strawberry, Peach)
- 
take関数- 指定した個数分を取得 ※
Iterable<String>となる 
 - 指定した個数分を取得 ※
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.take(2));
}
実行結果
(Apple, Strawberry)
- 
skip関数- 指定した位置から取得 ※
Iterable<String>となる 
 - 指定した位置から取得 ※
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.skip(2));
}
実行結果
(Peach)
- 
reduce関数- コレクションを単一の値に計算等処理を行いながら、減らす(例:intのListをint値に変更)
 - ※コレクションの型に依存するため、StringのListはString値のみ
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  final String sum = list.reduce((String a, String b) => a + b);
  print(sum);
}
実行結果
AppleStrawberryPeach
- 
fold関数- 初期値を与えられるreduce
 - ※コレクションの型に依存しないため、IntのListをString値も可
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  final String sum = list.fold('SUM:', (String a, String b) => a + b);
  print(sum);
  final int sumLength =
      list.fold(0, (int count, String str) => count + str.length);
  print(sumLength);
}
実行結果
SUM:AppleStrawberryPeach
20
- 
map関数→toList関数- 与えられた各要素を新しく格納する値として修正し、それらを新しいリストとする
 
 
void main() {
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.map((String value) => 'Eat:' + value).toList());
}
実行結果
[Eat:Apple, Eat:Strawberry, Eat:Peach]
- 
expand関数- 各要素に与えた処理を実施し、コレクションを返す
- 二次元配列を一次元配列に変換や、要素の中身を複製することが可能
 
 
 - 各要素に与えた処理を実施し、コレクションを返す
 
void main() {
  final wordList = [
    ['Apple', 'Strawberry', 'Peach', 'Cherry', 'Litchi'],
    ['Olympic', 'World Cup', 'Paralympic Games'],
    ['Pokémon', 'Doraemon', 'Dragon Ball'],
  ];
  print(wordList.expand((List<String> values) => values).toList());
  final list = ['Apple', 'Strawberry', 'Peach'];
  print(list.expand((String value) => [value, value]).toList());
}
実行結果
[Apple, Strawberry, Peach, Cherry, Litchi, Olympic, World Cup, Paralympic Games, Pokémon, Doraemon, Dragon Ball]
[Apple, Apple, Strawberry, Strawberry, Peach, Peach]
組み合わせ
コードとして縦につなげていく書き方をする場合
- 
関数の種類
- 検索・修正
- 
where関数やmap関数、skip関数、followedBy等は複数呼び出し可能- =コレクションとして、次の関数を実行可能
 
 
 - 
 - 値・オブジェクト作成(コレクション作成確定 or コレクション以外のオブジェクトに変換)
- 
toList/toSet関数、every関数、contains関数、reduce関数、fold関数等は最後の末尾で一度呼び出す- =値・オブジェクトを一つに確定(最後にList/Setオブジェクトとすることや、true/false、特定の値・オブジェクトとなる)
 
 
 - 
 
 - 検索・修正
 - 
特定の値に対して、特定の動作を行い格納する例
 
void main() {
  final list1 = ['Apple', 'Strawberry', 'Peach'];
  final list2 = list1
      .where((String value) => value != 'Apple')
      .map((String value) => value + value)
      .toList();
  print(list2);
}
実行結果
[StrawberryStrawberry, PeachPeach]
Set
追加
- 
add関数- 要素を末尾へ追加
 
 
void main() {
  final set = <String>{};
  set.add('Apple');
  print(set);
}
実行結果
{Apple}
- 
addAll関数- コレクション(Set)の中身すべてを要素として末尾へ追加
 - ※重複は最初のみ追加
 
 
void main() {
  final set1 = {'Apple'};
  final set2 = {'Cherry', 'Litchi', 'Apple'};
  set1.addAll(set2);
  print(set1);
}
実行結果
{Apple, Cherry, Litchi}
- 
insert関数- Setにはない
 
 - 
insertAll関数- Setにはない
 
 
削除
- 
remove関数- 指定した値の要素を削除 ※複数同じ値がある場合は、最初の要素のみ削除
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  set.remove('Cherry');
  print(set);
}
実行結果
{Apple, Litchi}
- 
removeAt関数- Setにはない
 
 - 
removeLast関数- Setにはない
 
 - 
removeAll関数- 指定したコレクションの要素を削除する
 - ※以下はListの
['Cherry', 'Litchi']でも同様結果となる 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  set.removeAll({'Cherry', 'Litchi'});
  print(set);
}
実行結果
{Apple}
- 
removeWhere関数- 指定さの要素を削除
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  set.removeWhere((String value) => value.length > 5);
  print(set);
}
実行結果
{Apple}
変更
- 
sort関数- Setにはない
 - 【備考】似てようなことを行うためには、
SplayTreeSetクラスを利用 
 
import 'dart:collection';
void main() {
  final SplayTreeSet<String> set =
      SplayTreeSet((a, b) => a.length.compareTo(b.length));
  set.add('111');
  set.add('1');
  set.add('11');
  print(set);
}
実行結果
{1, 11, 111}
- 
shuffle関数- Setにはない
 
 
確認
- 
forEach関数 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  set.forEach(print);
}
実行結果
Apple
Cherry
Litchi
- 
elementAt関数- 値確認
 - 範囲外を指定すると、実行時エラー(RangeError )となる
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.elementAt(0));
  print(set.elementAt(1));
  print(set.elementAt(2));
}
実行結果
Apple
Cherry
Litchi
- 
indexOf関数- Setにはない
 
 - 
lastIndexOf関数- Setにはない
 
 - 
lastIndexWhere関数- Setにはない
 
 - 
firstWhere関数- 値確認(bool値を返す関数による検索)※最初の一致
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.firstWhere((item) => item == 'Apple'));
  print(set.firstWhere((item) => item.startsWith('L')));
  print(set.firstWhere((item) => item == 'Banana',
      orElse: () => 'Banana Nothing'));
}
実行結果
Apple
Litchi
Banana Nothing
- 
contains関数 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.contains('Apple'));
  print(set.contains('Banana'));
}
実行結果
true
false
- 
every関数- コレクションのすべての要素が指定された条件を満たせばtrueを返す
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.every((String value) => value.length > 0));
  print(set.every((String value) => value.length > 10));
}
実行結果
true
false
- 
where関数- 与えた条件を満たす要素を持つコレクションを返す
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.where((String value) => value.length > 0));
  print(set.where((String value) => value.length > 10));
}
実行結果
(Apple, Cherry, Litchi)
()
変換(値として渡す用)
- 
toList/toSet関数- 各オブジェクトとする ※以下ListにtoListを利用した場合は、中身の同じの別オブジェクトを作成
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.toList());
  print(set.toSet());
}
実行結果
[Apple, Cherry, Litchi]
{Apple, Cherry, Litchi}
- 
join関数- 各要素の間に指定の文字を入れたStringを返す
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.join(','));
}
実行結果
Apple,Cherry,Litchi
- 
asMap関数- Setにはない
 
 - 
followedBy関数- このSet(コレクション)と別のSet(コレクション)に連結させて、パラメータとして渡す
 - ※
Iterable<String>となるため、Setとする場合は、set1.followedBy(set2).toSet()とする 
 
void main() {
  final set1 = {'Apple'};
  final set2 = {'Cherry', 'Litchi', 'Apple'};
  print(set1.followedBy(set2));
}
実行結果
(Apple, Cherry, Litchi, Apple)
- 
take関数- 指定した個数分を取得
 - ※
Iterable<String>となる 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.take(2));
}
実行結果
(Apple, Cherry)
- 
skip関数- 指定した位置から取得
 - ※
Iterable<String>となる 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.skip(2));
}
実行結果
(Litchi)
- 
reduce関数- コレクションを単一の値に計算等処理を行いながら、減らす(例:intのSetをint値に変更)
 - ※コレクションの型に依存するため、StringのSetはString値のみ
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  final String sum = set.reduce((String a, String b) => a + b);
  print(sum);
}
実行結果
AppleCherryLitchi
- 
fold関数- 初期値を与えられるreduce
 - ※コレクションの型に依存しないため、StringのSetをint値も可
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  final String sum = set.fold('SUM:', (String a, String b) => a + b);
  print(sum);
  final int sumLength =
      set.fold(0, (int count, String str) => count + str.length);
  print(sumLength);
}
実行結果
SUM:AppleCherryLitchi
17
- 
map関数→toSet関数- 与えられた各要素を新しく格納する値として修正し、それらを新しいSetとする
 
 
void main() {
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.map((String value) => 'Eat:' + value).toSet());
}
実行結果
{Eat:Apple, Eat:Cherry, Eat:Litchi}
- 
expand関数- 各要素に与えた処理を実施し、コレクションを返す
- 二次元配列を一次元配列に変換や、要素の中身を複製することが可能
 
 
 - 各要素に与えた処理を実施し、コレクションを返す
 
void main() {
  final wordSets = {
    {'Apple', 'Strawberry', 'Peach', 'Cherry', 'Litchi'},
    {'Olympic', 'World Cup', 'Paralympic Games'},
    {'Pokémon', 'Doraemon', 'Dragon Ball'},
  };
  print(wordSets.expand((Set<String> values) => values).toSet());
  final set = {'Apple', 'Cherry', 'Litchi'};
  print(set.expand((String value) => [value + '1', value + '2']).toSet());
}
実行結果
{Apple, Strawberry, Peach, Cherry, Litchi, Olympic, World Cup, Paralympic Games, Pokémon, Doraemon, Dragon Ball}
{Apple1, Apple2, Cherry1, Cherry2, Litchi1, Litchi2}
- 
intersection関数- このSet(コレクション)と別のSet(コレクション)の共通要素を持つSetを返す
 - ※共通の要素が無い場合は空のSetを返す
 
 
void main() {
  final set1 = {'Apple', 'Banana', 'Cherry'};
  final set2 = {'Cherry', 'Litchi', 'Apple'};
  print(set1.intersection(set2));
  print(set2.intersection(set1));
}
実行結果
{Apple, Cherry}
{Cherry, Apple}
- 
union関数- このSet(コレクション)と別のSet(コレクション)のすべての要素を持つSetを返す
 
 
void main() {
  final set1 = {'Apple', 'Banana', 'Cherry'};
  final set2 = {'Cherry', 'Litchi', 'Apple'};
  print(set1.union(set2));
  print(set2.union(set1));
}
実行結果
{Apple, Banana, Cherry, Litchi}
{Cherry, Litchi, Apple, Banana}
組み合わせ
コードとして縦につなげていく書き方をする場合
- 
関数の種類
- 検索・修正
- 
where関数やmap関数、skip関数、followedBy等は複数呼び出し可能- =コレクションとして、次の関数を実行可能
 
 
 - 
 - 値・オブジェクト作成(コレクション作成確定 or コレクション以外のオブジェクトに変換)
- 
toList/toSet関数、every関数、contains関数、reduce関数、fold関数等は最後の末尾で一度呼び出す- =値・オブジェクトを一つに確定(最後にList/Setオブジェクトとすることや、true/false、特定の値・オブジェクトとなる)
 
 
 - 
 
 - 検索・修正
 - 
特定の値に対して、特定の動作を行い格納する例
 
void main() {
  final set1 = {'Apple', 'Cherry', 'Litchi'};
  final set2 = set1
      .where((String value) => value != 'Apple')
      .map((String value) => value + value)
      .toSet();
  print(set2);
}
実行結果
{CherryCherry, LitchiLitchi}
Map
追加
- 
add関数- Mapにはない
 
 - 
addAll関数- コレクション(Map)の中身すべてを要素として末尾へ追加
 
 
void main() {
  final map1 = <int, String>{
    0: 'Banana',
  };
  final map2 = <int, String>{
    0: 'Apple',
    1: 'Peach',
    2: 'Litchi',
  };
  map1.addAll(map2);
  print(map1);
}
実行結果
{0: Apple, 1: Peach, 2: Litchi}
- 
addEntries関数- MapEntry(キー/値のペア)を要素として末尾へ追加
 - 以下の場合は、
Iterable<MapEntry<int, String>> 
 
void main() {
  final map1 = <int, String>{
    0: 'Banana',
  };
  final map2 = <int, String>{
    0: 'Apple',
    1: 'Peach',
    2: 'Litchi',
  };
  print(map2.entries);
  map1.addEntries(map2.entries);
  print(map1);
}
実行結果
(MapEntry(0: Apple), MapEntry(1: Peach), MapEntry(2: Litchi))
{0: Apple, 1: Peach, 2: Litchi}
- 
insert関数- Mapにはない
 
 - 
insertAll関数- Mapにはない
 
 - 
putIfAbsent関数- 指定したkeyが無い場合に、追加する
- リストに格納したkeyを利用したfor文により、実行も可能
 
 
 - 指定したkeyが無い場合に、追加する
 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Peach',
    2: 'Litchi',
  };
  map.putIfAbsent(0, () => 'Banana');
  map.putIfAbsent(3, () => 'Banana');
  print(map);
  for (var key in [4, 5]) {
    map.putIfAbsent(key, () => 'Strawberry');
  }
  print(map);
}
実行結果
{0: Apple, 1: Peach, 2: Litchi, 3: Banana}
{0: Apple, 1: Peach, 2: Litchi, 3: Banana, 4: Strawberry, 5: Strawberry}
削除
- 
remove関数- 指定したkeyの要素を削除
 
 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Peach',
    2: 'Litchi',
  };
  map.remove(1);
  print(map);
}
実行結果
{0: Apple, 2: Litchi}
- 
removeAt関数- Mapにはない
 
 - 
removeLast関数- Mapにはない
 
 - 
removeRange関数- Mapにはない
 
 - 
removeWhere関数- 指定された条件の要素を削除
 
 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Peach',
    2: 'Litchi',
  };
  map.removeWhere((int key, String value) => value.length > 5);
  print(map);
}
実行結果
{0: Apple, 1: Peach}
変更
- 
sort関数- Mapにはない
 - 【備考】似てようなことを行うためには、
SplayTreeMapクラスを利用 
 
import 'dart:collection';
void main() {
  final map1 = SplayTreeMap();
  final map2 = <int, String>{
    2: 'Litchi',
    0: 'Apple',
    1: 'Peach',
  };
  map1.addAll(map2);
  print(map1);
}
実行結果
{0: Apple, 1: Peach, 2: Litchi}{1, 11, 111}
- 
shuffle関数- Mapにはない
 
 - 
update関数- 指定したkeyの値を変更する
- 指定したkeyが無い場合には、追加する場合は ifAbsentオプションを追加する
 - ※以下では
ifAbsent: () => 'Apple'が無いと実行時エラーとなるUnhandled Exception: Invalid argument (key): Key not in map.: 3
 
 
 - 指定したkeyの値を変更する
 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Cherry',
    2: 'Litchi',
  };
  map.update(0, (String value) => 'Banana');
  print(map);
  map.update(3, (String value) => 'Strawberry', ifAbsent: () => 'Apple');
  print(map);
}
実行結果
{0: Banana, 1: Cherry, 2: Litchi}
{0: Banana, 1: Cherry, 2: Litchi, 3: Apple}
- 
updateAll関数- 
update関数をすべての要素に対して実行 
 - 
 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Cherry',
    2: 'Litchi',
  };
  map.updateAll((int key, String value) => 'Banana');
  print(map);
  map.updateAll((int key, String value) {
    if (key.isEven) {
      return 'isEven';
    }
    return 'isOdd';
  });
  print(map);
}
実行結果
{0: Banana, 1: Banana, 2: Banana}
{0: isEven, 1: isOdd, 2: isEven}
確認
- 
forEach関数 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Cherry',
    2: 'Litchi',
  };
  map.forEach((key, value) {
    print('$key:$value');
  });
}
実行結果
0:Apple
1:Cherry
2:Litchi
- 
elementAt関数- Mapにはない
 
 - 
indexOf関数- Mapにはない
 
 - 
lastIndexOf関数- Mapにはない
 
 - 
lastIndexWhere関数- Mapにはない
 
 - 
firstWhere関数- Mapにはない
 
 - 
contains関数- Mapにはない(代わりに、
containsKeyとcontainsValue) 
 - Mapにはない(代わりに、
 - 
containsKey関数 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Cherry',
    2: 'Litchi',
  };
  print(map.containsKey(0));
  print(map.containsKey(-1));
}
実行結果
true
false
- 
containsValue関数 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Cherry',
    2: 'Litchi',
  };
  print(map.containsValue('Apple'));
  print(map.containsValue('Banana'));
}
実行結果
true
false
- 
every関数- Mapにはない
 
 - 
where関数- Mapにはない
 
 
変換(値として渡す用)
- 
toList/toSet関数- Mapにはない
 
 - 
join関数- Mapにはない
 
 - 
asMap関数- Mapにはない
 
 - 
followedBy関数- Mapにはない
 
 - 
take関数- Mapにはない
 
 - 
skip関数- Mapにはない
 
 - 
reduce関数- Mapにはない
 
 - 
fold関数- Mapにはない
 
 - 
map関数- 与えられた各要素を新しく格納する値として修正し、それらを新しいMapとする
- 関数の中ではMapEntryを渡す
 
 
 - 与えられた各要素を新しく格納する値として修正し、それらを新しいMapとする
 
void main() {
  final map = <int, String>{
    0: 'Apple',
    1: 'Cherry',
    2: 'Litchi',
  };
  print(
      map.map((int key, String value) => MapEntry(key + 100, value + 'Color')));
}
実行結果
{100: AppleColor, 101: CherryColor, 102: LitchiColor}
- 
expand関数- Mapにはない
 
 
組み合わせ
コードとして縦につなげていく書き方は、Mapの場合は不要な場合が多い(key/valueにより、簡単に実現可能)
Discussion