[Dart]Map(マップ)の値を更新するには?

Dart

どうも、ちょげ(@chogetarou)です。

Mapの値を更新する方法を紹介します。

スポンサーリンク

方法

コンピューター, ノート, オフィス, コード, プログラミング, プログラム

Mapの値を更新する方法は、3つあります。

map[key] = newValue

1つ目は、[]を使う方法です。

まず、「map[key]」のように、[key]を使ってキーにアクセスします。

そして、map[key]に新しい値を代入します。

map[key] = newValue

[]内に指定したキーの値が、代入された値に更新されます。

[]内に指定したキーが存在しない場合は、新しいキーと値のペアがマップに追加されます。

使用例

void main() {
  var numbers = {
    'One' : 1,
    'Two' : 0,
    'Three' : 3,
  };
  
  //Twoの値を2に更新
  numbers['Two'] = 2;
  
  //Fourに4を代入 -> Fourが存在しないので、新しく追加
  numbers['Four'] = 4;
  
  print(numbers); //{One: 1, Two: 2, Three: 3, Four: 4}
}

updateメソッド

2つ目は、updateメソッドを使う方法です。

具体的には、Mapからupdateメソッドを呼び出します。

updateメソッドの第1引数には更新するキー、第2引数には更新後の値を返すコールバック関数を指定します。

//keyの値をnewValueに更新
map.update(key, (value) => newValue);

updateメソッドは、 第1引数のキーが存在すれば、第2引数の戻り値の値に更新します。

第1引数が存在しない場合は、何もしません。

もし、第1引数のキーが存在しない時、新しいキーとして追加したい場合は、引数「ifAbsent」を使います。

具体的には、updateメソッドの引数「ifAbsent」に新しいキーに対応する値を返す関数を指定します。

map.update(key, (value) => newValue, ifAbsent: () => value);

updateメソッドの第2引数のコールバック関数は、引数で更新前の値を取得することが出来ます。

使用例

void main() {
  var numbers = {
    'One' : 1,
    'Two' : 0,
    'Three' : 3,
  };
  
  numbers.update('Two', (value) => 2);
  
  //値が存在しない場合は、引数「ifAbsent」の戻り値を追加
  numbers.update('Four', (value) => 4, ifAbsent: () => 4);
  
  print(numbers); //{One: 1, Two: 2, Three: 3, Four: 4}
}

updateAllメソッド

3つ目は、updateAllメソッドを使う方法です。

具体的には、MapからupdateAllメソッドを呼び出します。

updateAllメソッドの引数には、新しい値を返す関数を指定します。

map.updateAll((key, value) => newValue)

updateAllメソッドは、Map内の要素を順番に取り出していき、キーの値を関数の戻り値で更新します。

updateAllメソッドのコールバック関数は、第1引数で要素のキー、第2引数で要素の値を取得します。

使用例

void main() {
  var numbers = {
    'One' : 1,
    'Two' : 2,
    'Three' : 3,
  };
  
  numbers.updateAll((key, value) => value * value);
  
  print(numbers); //{One: 1, Two: 4, Three: 9}
}

まとめ

Mapで値を更新する方法は、次の3つです。

  • []を使って、新しい値をキーに代入する方法
  • updateメソッドで指定したキーを更新する方法
  • updateAllメソッドでMap全体の値を更新する方法

コメント

タイトルとURLをコピーしました