Dartの勉強1−3:配列(lists)と高階関数(methods)
匿名関数の前に配列と高階関数を確認した方がいいというChatGPT先生の助言に基づいています。
- 配列(lists:In Dart, arrays are List objects, so most people just call them lists.)
複数の値を格納できる変数ということでいいと思います。- 配列作成(同じデータ型にするのが基本)
var numbers = [1, 2, 3]; var colors = ['white','black','pink', 'cyan']; List<bool>
answers = [true, false]; - 配列の操作例
void main() { var fruits = <String>[]; fruits.add('apples'); print(fruits); //[apples] fruits.addAll(['grapes', 'bananas', 'oranges']); print(fruits); //[apples, grapes, bananas, oranges] var len = fruits.length; //配列の要素数 print(len); //4 var appleIndex = fruits.indexOf('apples'); fruits.removeAt(appleIndex); print(fruits); //[grapes, bananas, oranges] fruits.clear(); //全ての要素を削除 print(fruits); //[] var vegetables = List.filled(6, 'broccoli'); //まとめて作成 print(vegetables); //[broccoli, broccoli, broccoli, broccoli, broccoli, broccoli] }
- 配列作成(同じデータ型にするのが基本)
- 高階関数(methods)
- forEach
void main() { var colors = ['white', 'black', 'pink', 'cyan']; colors.forEach((color) { print(color); }); }配列colorsから1つずつcolorとして取り出すループ処理となっています。
- map
int doubleValue(int num) { return num * 2; } void main() { var numbers = [1, 2, 3, 4, 5, 6, 7]; var doubled = numbers.map(doubleValue).toList(); print(doubled); }個人的にはかなり理解に苦しんだのですが、まとめて抜き出して、まとめて処理する感じです。最後にtoList()をつけてListに戻すのがお決まりのようです。
- sort
int ascendingOrder(int a, int b) { return a - b; // a - b が比較結果 } int descendingOrder(int a, int b) { return b - a; // b - a が比較結果 } void main() { var numbers = [5, 2, 8, 1, 3]; numbers.sort(ascendingOrder); //正の値だとaが大きいと判断してaとbを入れ替え print(numbers); // [1, 2, 3, 5, 8] numbers.sort(descendingOrder); //正の値だとbが大きいと判断してaとbを入れ替え print(numbers); // [8, 5, 3, 2, 1] }Stringの場合はcompareToメソッドを使って並べ替えが可能です。
// 名前付き関数 int alphabeticalOrder(String a, String b) { return a.compareTo(b); } void main() { var names = ['Charlie', 'Alice', 'Bob']; // 名前付き関数を使用してソート names.sort(alphabeticalOrder); print(names); // ['Alice', 'Bob', 'Charlie'] }
- forEach