Dart リスト(配列)から位置を指定して値を削除する

Dart リスト(配列)から位置を指定して値を削除する

Dartで、リスト(配列)から位置を指定して値を削除するコードを記述してます。「removeAt」で位置を指定すると削除できます。また、「removeAt」は範囲外の位置や「const」を指定したリストに対して実行するとエラーが発生します。

環境

  • OS windows11 home
  • Dart 2.18.1

位置を指定して値を削除

位置を指定して値を削除するには「 removeAt 」を使用します。

リスト.removeAt(位置)

※ 値が存在すれば削除した値が返ります

実際に使用して位置を指定して削除してみます。

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

  print(list.removeAt(0)); // aaa

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

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

存在しない位置を指定するとエラー「RangeError」が発生します。

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

  print(list.removeAt(5));

  print(list);
}
Unhandled exception:
RangeError (index): Invalid value: Not in inclusive range 0..3: 5
#0      List.[] (dart:core-patch/growable_array.dart:264:36)
#1      List.removeAt (dart:core-patch/growable_array.dart:23:22)
#2      main (file:///c:/sample/main.dart:4:14)
#3      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

定数

「const」で宣言したリストを削除しようとすると、エラー「Unsupported operation: Cannot remove from an unmodifiable list」が発生します。

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

  print(list.removeAt(0));

  print(list);
}
Unhandled exception:
Unsupported operation: Cannot remove from an unmodifiable list
#0      UnmodifiableListMixin.removeAt (dart:_internal/list.dart:164:5)
#1      main (file:///c:/sample/main.dart:4:14)
#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', 'ccc'];

  print(list.removeAt(0)); // aaa

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

値を指定して削除

ちなみに、位置を指定して削除する場合は「remove」を使用します。
戻り値は値が存在すれば「true」で存在しなければ「false」が返ります。
※最初に見つかったもののみが削除されます。

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

  print(list.remove('ccc')); // true

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