Help us understand the problem. What is going on with this article?

あなたが知っておくべき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()

リスト内の各要素に対して関数を実行する。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした