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

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]

}