Dart リスト(配列)を範囲を指定して値を変更する

Dartで、リスト(配列)を範囲を指定して値を変更するコードを記述してます。「 fillRange 」を使用して範囲と値を設定すれば変更が可能になります。定数「const」で定義された定数に使用するとエラーが発生します。
環境
- OS windows11 home
- Dart 2.18.1
範囲を指定して値を変更
範囲を指定して値を変更するには「 fillRange 」を使用します。
リスト.fillRange(開始位置,終了位置,値)
※終了位置のインデックス番号は「範囲 -1」となります
実際に使用して値を変更してみます。
void main() {
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
list.fillRange(1, 4, 'AAA');
print( list );
// [aaa, AAA, AAA, AAA, eee]
}
実行結果を見ると、インデックス番号「1」から「3」までの値が変更されていることが確認できます。

範囲に同じ値を指定すると、何も変更されません。
void main() {
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
list.fillRange(3, 3, 'AAA');
print( list );
// [aaa, bbb, ccc, ddd, eee]
}
範囲を超えるとエラー「RangeError (end)」が発生します。
void main() {
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
list.fillRange(1, 6, 'AAA');
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 ListMixin.fillRange (dart:collection/list.dart:408:16)
#2 main (file:///c:/sample/main.dart:5:8)
#3 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#4 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
範囲が逆になっていてもエラー「RangeError (end)」となります。
void main() {
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
list.fillRange(3, 2, 'AAA');
print( list );
}
Unhandled exception:
RangeError (end): Invalid value: Not in inclusive range 3..5: 2
#0 RangeError.checkValidRange (dart:core/errors.dart:363:9)
#1 ListMixin.fillRange (dart:collection/list.dart:408:16)
#2 main (file:///c:/sample/main.dart:5: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 modify an unmodifiable list」が発生します。
void main() {
const list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
list.fillRange(1, 4, 'AAA');
print( list );
}
Unhandled exception:
Unsupported operation: Cannot modify an unmodifiable list
#0 UnmodifiableListMixin.fillRange (dart:_internal/list.dart:189:5)
#1 main (file:///c:/sample/main.dart:5: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.fillRange(1, 4, 'AAA');
print( list );
// [aaa, AAA, AAA, AAA, eee]
}
-
前の記事
Visual Studio 2022 ブックマークを追加・削除するショートカットキー 2022.10.28
-
次の記事
sqlite 取得したデータに演算を実行する 2022.10.28
コメントを書く