##はじめに
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()
リスト内の各要素に対して関数を実行する。
fruits.forEach((fruit) => print(fruit)); // => banana pineapple watermelon
##2.map()
与えられた各要素に処理を掛けた後に、その要素群に対する新しいリストを作成する。
var mappedFruits = fruits.map((fruit) => 'I love $fruit').toList();
print(mappedFruits); // => ['I love banana', 'I love pineapple', 'I love watermelon']
##3.contains()
与えられた要素がリストにあるか確認する。
print(numbers.contains(6)); // => false
print(fruits.contains('pineapple')); // => true
##4.sort()
与えられた順序付け関数に基づいてリスト内の要素を順序付けする。
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()
与えられた関数を使って、要素を単一の値に圧縮する。
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()
すべての要素がテストを満たすことを確認する。
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()
テストを満たす要素のコレクションを返す。
// 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()
要素をインクルードまたはスキップしたコレクションを返す。
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()
与えられたコレクションから新しいリストを作成する。
var clonedFiboNumbers = List.from(fiboNumbers);
print('Cloned list: $clonedFiboNumbers');
##10.expand()
各要素を0個以上の要素に展開します。
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()
が結構使えると思う。
あとList.from()
はメソッドというよりコンストラクタでは?笑