【Flutter】Dartで使える配列の使い方、便利な関数一覧
はじめに
Flutterで開発をしていて、配列操作の関数を忘れるので、
- メモ代わり
- 知識定着のため
を理由に書いております。
間違えている点や、追加してほしい関数などがありましたらお気軽にコメントください🙂
他にも使用した関数が増えれば追加しようと思います!
データを追加する
add | データを一つ追加する
リストの一番後ろに追加します。
final numbers = <int>[1, 2, 3];
numbers.add(4);
print(numbers); // [1, 2, 3, 4]
addAll | データを複数追加する
こちらも同様一番後ろに追加します。
final numbers = <int>[1, 2, 3];
numbers.addAll([4, 5, 6]);
print(numbers); // [1, 2, 3, 4, 5, 6]
insert | 指定した番号にデータを一つ追加する
配列のindex番号を指定して、その場所に新しい要素を追加します。
下記の例ではindex = 2
なので0から数えて3番目に10
という要素を追加しています。
final numbers = <int>[1, 2, 3, 4];
const index = 2;
numbers.insert(index, 10);
print(numbers); // [1, 2, 10, 3, 4]
insertAll | 指定した番号にデータを複数追加する
insert
関数の複数版です。
final numbers = <int>[1, 2, 3, 4];
final insertItems = [10, 11];
numbers.insertAll(2, insertItems);
print(numbers); // [1, 2, 10, 11, 3, 4]
データを削除する
clear | 配列の中身を全て削除する
その名の通り、配列の中身を全て削除し、空の配列にします。
final numbers = <int>[1, 2, 3];
numbers.clear();
print(numbers.length); // 0
print(numbers); // []
remove | 指定した要素を削除する
私は知らなかったのですが、リストから指定した要素を消してくれるだけでなく、削除できたかどうか(指定した要素があったかどうか)のbool
を返してくれるみたいです。
final parts = <String>['head', 'shoulders', 'knees', 'toes'];
final retVal = parts.remove('head'); // true
print(parts); // [shoulders, knees, toes]
The method has no effect if [value] was not in the list.
final parts = <String>['shoulders', 'knees', 'toes'];
// Note: 'head' has already been removed.
final retVal = parts.remove('head'); // false
removeAt | 指定したindex番号の要素を削除する
配列の番号を指定して、その番号の要素を削除してくれる関数です。こちらも知らなかったのですが、削除した要素を返してくれるみたいです。
final parts = <String>['head', 'shoulder', 'knees', 'toes'];
final retVal = parts.removeAt(2); // knees
print(parts); // [head, shoulder, toes]
removeLast | 配列の最後の要素を削除する
配列の最後の要素を削除し、削除した要素を返してくれます。
final parts = <String>['head', 'shoulder', 'knees', 'toes'];
final retVal = parts.removeLast(); // toes
removeRange | 範囲を指定して削除する
removeRange(start, end)
なんですが、endの配列番号の要素は消さないというところがなんともややこしいです。
簡単な覚え方としては上記のremoveRange(1,4)の例だと、
[1, 2, 3, 4, 5]の1番目の[2]からend(4) - start(1)
をした3つ分消しますよということ。
2から3つ消すので2と3と4が消えて、[1, 5]になると考えると覚えやすいです。
final numbers = <int>[1, 2, 3, 4, 5];
numbers.removeRange(1, 4);
print(numbers); // [1, 5]
removeWhere | 指定した条件に当てはまるものを全て削除する
条件を指定して、その条件に当てはまる要素を全て削除する関数です。下記の例だと、文字数が3文字のものを削除しています。文字数が3文字のone
、two
が削除され、新しい配列ができています。返り値はありません。
final numbers = <String>['one', 'two', 'three', 'four'];
numbers.removeWhere((item) => item.length == 3);
print(numbers); // [three, four]
要素を探す
contains | 指定したものがリストにあるかどうかをboolで返す
指定したものがリストにあればtrue
を、なければfalse
を返す関数です。
下記例ではgasPlanets
というMapに対して、
-
key
が1
の要素はあるか? => true -
key
が5
の要素はあるか? => false -
value
がJupiter
の要素はあるか? => true -
value
がMerucy
の要素はあるか? => false
となってます。
final gasPlanets = <int, String>{1: 'Jupiter', 2: 'Saturn'};
final containsOne = gasPlanets.keys.contains(1); // true
final containsFive = gasPlanets.keys.contains(5); // false
final containsJupiter = gasPlanets.values.contains('Jupiter'); // true
final containsMercury = gasPlanets.values.contains('Mercury'); // false
any | リストの要素のうち、指定した条件が一つでもあればtrueを返す
指定した条件に一致する要素が一つでもあればtrue
を、なければfalse
を返す関数です。
下記例ではnumbers
リストの中に
-
5
以上の数値はあるか? => true -
10
以上の数値はあるか? => false
となっています。
final numbers = <int>[1, 2, 3, 5, 6, 7];
var result = numbers.any((element) => element >= 5); // true;
result = numbers.any((element) => element >= 10); // false;
every | リストの要素のうち、指定した条件が全てに当てはまればtrueを返す
上のany
関数の全部版です。
any
関数は一つでも当てはまればtrue
を返したのに対し、every
関数ではすべてが条件に一致しないとtrue
を返さないのが特徴です。
下記例ではplanetsByMass
というMapの中に
-
key
がすべて1
より小さいか? => true
となっています。
final planetsByMass = <double, String>{0.06: 'Mercury', 0.81: 'Venus',
0.11: 'Mars'};
// Checks whether all keys are smaller than 1.
final every = planetsByMass.keys.every((key) => key < 1.0); // true
firstWhere | 指定した条件に当てはまった要素を返す
配列の最初から確認し、一番初めに条件に当てはまった要素を返してくれます。
条件に当てはまった時点で終了します。
orElse
を書くと、条件に当てはまるものがなかった時の返り値を指定することができます。
下記、一番下の例の場合、当てはまる条件がなければ-1
を返します。
final numbers = <int>[1, 2, 3, 5, 6, 7];
var result = numbers.firstWhere((element) => element < 5); // 1
result = numbers.firstWhere((element) => element > 5); // 6
result =
numbers.firstWhere((element) => element > 10, orElse: () => -1); // -1
条件に一致しないときにnullを返す方法
上記の例でnull
を返したい時はfirstWhere
関数の第2引数であるorElse
を使用します。
下記の例だと、numbers
の中から4
を探していますが、ないのでnull
が返されます。
元々定義しているnumbers
リストがint
型でnullableではないので、int?
型にcast
しないといけない点がややこしいです。
final numbers = <int>[1, 2, 3, 5, 6, 7];
int? result = numbers.cast<int?>().firstWhere((element) =>
element == 4,
orElse: () => null
); // null
要素を並び替える
sort | compare関数で指定された順序でソートする
(a, b)
が分かりにくいかもしれませんが、下記の一番上の例で言うと
1回目. (a, b)
=> (two, three)
2回目. (a, b)
=> (three, four)
compareTo
関数は中身の要素と比較して、大きければ1
を返し、小さければ-1
を返す関数です。
同じ数字なら0
を返します。
下記2番目の例のように、sortする配列が数字であれば、sort
関数を呼び出すだけで並び替えてくれます。
final numbers = <String>['two', 'three', 'four'];
// Sort from shortest to longest.
numbers.sort((a, b) => a.length.compareTo(b.length));
print(numbers); // [two, four, three]
final numbers = <int>[13, 2, -11, 0];
numbers.sort();
print(numbers); // [-11, 0, 2, 13]
final numbers = <String>['one', 'two', 'three', 'four'];
numbers.sort((a, b) => a.length.compareTo(b.length));
print(numbers); // [one, two, four, three] OR [two, one, four, three]
その他、便利?な関数
asMap | 配列をMapに変換する
配列をMap
にして返します。key
の値はindex番号になります。
var words = <String>['fee', 'fi', 'fo', 'fum'];
var map = words.asMap(); // {0: fee, 1: fi, 2: fo, 3: fum}
map.keys.toList(); // [0, 1, 2, 3]
Author And Source
この問題について(【Flutter】Dartで使える配列の使い方、便利な関数一覧), 我々は、より多くの情報をここで見つけました https://zenn.dev/namioto/articles/32ce1c891ade37著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol