コレクション – Dart逆引きリファレンス

2012.03.12

コレクション(Collections)

配列を利用したい

JavaScript等と同様の配列リテラルが利用できますが、オブジェクトの型は「Array」ではなく「List」となります。

var array = new List();
var array = [];
var array = [1, 2, 3];

配列要素の追加を行う場合には「add」メソッドを使います。
※JavaScriptの「push」メソッドのように配列の新しい長さは返されないことに注意してください。

var array = ['hoge', 'piyo'];
array.add('fuga'); // == null

配列の長さは「length」プロパティを参照します。

array.length; // == 3

最後の配列要素を取り出す場合には「removeLast」メソッドを使います。

array.removeLast(); // == 'fuga'

自前でソートしたい

比較関数を引数として配列の「sort」メソッドを実行します。

var numbers = [3, 1, 4, 15, 9];
numbers.sort((a, b) => a - b); // == [1, 3, 4, 9, 15];

比較関数はbよりもaが先にくる場合は負値、aとbが同値の場合は0、aよりもbが先にくる場合は正値を返すように実装します。
※上記の例で用いている関数表記「(a, b) => a - b」はDart固有の短縮形です。「function(a, b) { return a - b; }」を表します。

空の連想配列を生成したい

「{}」もしくは「Map」インタフェースを使用します。

var hashMap = {};
var hashMap = new Map();

キー・バリューが設定された連想配列を生成したい

初期化時にキー・バリューのペアを設定しておくことができます。

var locale = {
  'japan' : 'ja-JP',
  'usa' : 'en-US'
};

// NG
var locale = {
  japan: 'ja-JP',
  usa: 'en-US'
};

Dartではキーを文字列リテラルで指定しなければならないことに注意してください。

連想配列の値にアクセスしたい

角括弧を用いた表記方法で値にアクセスします。

locale['japan']; // == 'ja-JP'
locale['france'] = 'fr-FR';

locale.japan; // NG

JavaScriptのようにドット表記でのアクセスは出来ないことに注意してください。

ユニークな(一意性が保たれた)配列を利用したい

「Set」インタフェースを使用します。

Set cars = new Set();
cars.add('RX-8');
cars.add('Miata');
cars.length; // == 2

cars.add('RX-8');
cars.length; // == 2

キュー(先入れ先出し)を利用したい

「Queue」インタフェースを使用します。

var queue = new Queue();
queue.add('hoge');
queue.add('piyo');

queue.length; // 2

queue.removeFirst(); // 'hoge'

queue.length; // 1

コレクションにジェネリクスを利用したい

Javaと同様の表記法でジェネリクスを用いることができます。

List<String> list = new List<String>();
list.add('hoge'); // OK
list.add(123); // NG:int is not assignable to String

Map<String, int> map= new Map<String, int>();
map['hoge'] = 123; // OK
map['piyo'] = 'fuga' // NG:String is not assignable to int

Set<String> sets = new Set<String>();

Queue<String> queue = new Queue<String>();