Dart リスト(配列)の値を範囲を指定して削除する
Dartで、リスト(配列)の値を範囲を指定して削除するコードを記述してます。「removeRange」で開始位置と終了位置を指定することで削除できます。また、「removeRange」は範囲外の位置や「const」を指定したリストに対して実行するとエラーが発生します。
環境
- OS windows11 home
- Dart 2.18.1
最後の値を削除
最後の値を削除するには「removeRange」を使用します。
リスト.removeRange(開始位置,終了位置)
※ 終了位置の1つ前の位置までが削除されます
実際に使用して、範囲を指定して値を削除してみます。
void main() {
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
list.removeRange(1,3); // インデックス番号 1~2を削除
print(list); // [aaa, ddd, eee]
}
実行結果を見ると、インデックス番号「1~2」までの値が削除されていることが確認できます。
空のリストに「0~0」の範囲を設定すると、そのまま空のリストが生成されます。
void main() {
var list = [];
list.removeRange(0,0);
print(list); // []
}
範囲外の位置を指定するとエラー「RangeError」が発生します。
void main() {
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
list.removeRange(1,6);
print(list);
}
Unhandled exception:
RangeError (end): Invalid value: Not in inclusive range 1..5: 6
#0 RangeError.checkValidRange (dart:core/errors.dart:363:9)
#1 List.removeRange (dart:core-patch/growable_array.dart:78:16)
#2 main (file:///c:/sample/main.dart:4:8)
#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', 'ddd', 'eee'];
list.removeRange(1,3);
print(list);
}
Unhandled exception:
Unsupported operation: Cannot remove from an unmodifiable list
#0 UnmodifiableListMixin.removeRange (dart:_internal/list.dart:179: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', 'ddd', 'eee'];
list.removeRange(1,3); // インデックス番号 1~2を削除
print(list); // [aaa, ddd, eee]
}
新しいリストを生成
削除ではなく、範囲を指定新しいリストを作成するには「sublist」を使用します。
void main() {
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
var newList = list.sublist(1, 3);
print(list); // [aaa, bbb, ccc, ddd, eee]
print(newList); // [bbb, ccc]
}
-
前の記事
draw.io 自動保存を有効にする 2023.11.22
-
次の記事
Oracle Database シノニムをリネームする 2023.11.24
コメントを書く