あなたが知っておくべき10の配列メソッド(Dart)
https://codeburst.io/top-10-array-utility-methods-you-should-know-dart-feb2648ee3a2
を参考にして、少し自分なりに修正したサンプルを提示する。
操作するリスト
var fruits = ['banana', 'pineapple', 'watermelon'];
var numbers = [1, 3, 2, 5, 4];
1. forEach()
リスト内の各要素に対して関数を実行する。
code: forEach.dart
fruits.forEach((fruit) => print(fruit)); // => banana pineapple watermelon
2.map()
与えられた各要素に処理を掛けた後に、その要素群に対する新しいリストを作成する。
code:map.dart
var mappedFruits = fruits.map((fruit) => 'I love $fruit').toList();
print(mappedFruits); // => 'I love banana', 'I love pineapple', 'I love watermelon'
3.contains()
与えられた要素がリストにあるか確認する。
code: contains.dart
print(numbers.contains(6)); // => false
print(fruits.contains('pineapple')); // => true
4. sort()
与えられた順序付け関数に基づいてリスト内の要素を順序付けする。
code:sort.dart
print(numbers.sort((num1, num2) => num1 - num2)); // => 1, 2, 3, 4, 5
print(fruits.sort((a, b) => a.length.compareTo(b.length))); // => banana, pineapple, watermelon
5. reduce(), fold()
与えられた関数を使って、要素を単一の値に圧縮する。
code:reduce_fold.dart
var sum = numbers.reduce((curr, next) => curr + next);
print(sum); // => 15
const initialValue = 10;
var sum2 = numbers.fold(initialValue, (curr, next) => curr + next);
print(sum2); // => 25
6. every()
すべての要素がテストを満たすことを確認する。
code:every.dart
List<Map<String, dynamic>> users = [
{ “name”: ‘John’, “age”: 18 },
{ “name”: ‘Jane’, “age”: 21 },
{ “name”: ‘Mary’, “age”: 23 },
];
var is18AndOver = users.every((user) => user“age” >= 18);
print(is18AndOver); // => true
var hasNamesWithJ = users.every((user) => user“name”.startsWith('J'));
print(hasNamesWithJ); // => false
7. where(), firstWhere(), singleWhere()
テストを満たす要素のコレクションを返す。
code:where_firstWhere_singleWhere.dart
// See #6 for users list
var over21s = users.where((user) => user“age” > 21);
print(over21s.length); // => 1
var nameJ = users.firstWhere((user) => user“name”.startsWith(‘J’), orElse: () => null);
print(nameJ); // => {name: John, age: 18}
var under18s = users.singleWhere((user) => user“age” < 18, orElse: () => null);
print(under18s); // => null
firstWhere()はリスト内の最初の一致を返しますが、singleWhere()は一致が1つだけの場合は最初の一致を返します。
8. take(), skip()
要素をインクルードまたはスキップしたコレクションを返す。
code:take()_skip().dart
var fiboNumbers = 1, 2, 3, 5, 8, 13, 21;
print(fiboNumbers.take(3).toList()); // => 1, 2, 3
print(fiboNumbers.skip(5).toList()); // => 13, 21
print(fiboNumbers.take(3).skip(2).take(1).toList()); // => 3
9. List.from()
与えられたコレクションから新しいリストを作成する。
code:list.from().dart
var clonedFiboNumbers = List.from(fiboNumbers);
print(‘Cloned list: $clonedFiboNumbers’);
10. expand()
各要素を0個以上の要素に展開します。
code:expand().dart
var pairs = 1, 2], [3, 4;
var flattened = pairs.expand((pair) => pair).toList();
print(‘Flattened result: $flattened’); // => 1, 2, 3, 4
var input = 1, 2, 3;
var duplicated = input.expand((i) => i, i).toList();
print(duplicated); // => 1, 1, 2, 2, 3, 3
個人的には、これらに加えてshuffle(), sublist()が結構使えると思う