212
152

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

あなたが知っておくべき10の配列メソッド(Dart)

Last updated at Posted at 2019-07-19

##はじめに
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()はメソッドというよりコンストラクタでは?笑

212
152
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
212
152

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?