Dart リスト(配列)の指定した位置に値を挿入する

Dart リスト(配列)の指定した位置に値を挿入する

Dartで、リスト(配列)の指定した位置に値を挿入するコードを記述してます。「insert」で位置を指定することで値を挿入することができます。「insertAll」の場合はリストを挿入することができます。また、「insert」は存在しない位置を指定するとエラーが発生します。

環境

  • OS windows11 home
  • Dart 2.18.1

指定した位置に値を挿入

範囲を指定して値を変更するには「 insert 」を使用します。

リスト.insert(位置,値)

※指定した位置に値が挿入されます

実際に使用して値を挿入してみます。
※「0」を指定すると先頭に値が追加されます。

void main() {
  var list = ['aaa', 'bbb', 'ccc'];

  list.insert( 1, 'AAA' );

  print(list); // [aaa, AAA, bbb, ccc]

  list.insert( 3, 'BBB' );

  print(list); // [aaa, AAA, bbb, BBB, ccc]
}

実行結果を見ると、指定した位置の後ろに値が挿入されていることが確認できます。

指定した位置が存在しない場合はエラー「RangeError」が発生します。

void main() {
  var list = ['aaa', 'bbb', 'ccc'];

  list.insert( 4, 'AAA' );

  print(list);

}

Unhandled exception:
RangeError: Invalid value: Not in inclusive range 0..3: 4
#0      List.insert (dart:core-patch/growable_array.dart:11:7)
#1      main (file:///c:/sample/main.dart:4:8)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)    
#3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

挿入する値をリスト

挿入する値をリストにしたい場合は「insertAll」を使用します。

void main() {
  var list = ['aaa', 'bbb', 'ccc'];

  list.insertAll( 0, ['AAA', 'BBB'] );

  print(list); // [AAA, BBB, aaa, bbb, ccc]
}

定数

「const」で宣言したリストに挿入しようとすると、エラー「Unsupported operation: Cannot modify an unmodifiable list」が発生します。

void main() {
  const list = ['aaa', 'bbb', 'ccc'];

  list.insert( 1, 'AAA' );

  print(list);
}

Unhandled exception:
Unsupported operation: Cannot add to an unmodifiable list
#0      UnmodifiableListMixin.insert (dart:_internal/list.dart:119:5)
#1      main (file:///c:/sample/main.dart:4:8)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

「final」の場合は、メモリ領域は変更できるようなのでエラーにはなりません。

void main() {
  final list = ['aaa', 'bbb', 'ccc'];

  list.insert( 1, 'AAA' );

  print(list); // [aaa, AAA, bbb, ccc]
}