Closed4

リストから複数のインデックスを削除する

enoiuenoiu

以下のコードのように、リストから複数のインデックスを削除しようとすると、Uncaught Error: RangeError: Value not in range: 4というエラーが出た。

void main() {
  List<String> alphabets = ['a', 'b', 'c', 'd', 'e'];
  List<int> indexes = [1, 2, 4];

  for (int index in indexes) {
    alphabets.removeAt(index);
  }
  
  print(alphabets);
}
enoiuenoiu

たしかに、indexを削除すると、リストが切り詰められるので、削除するindexがずれてしまう。

enoiuenoiu

ということで、削除するindexリストを降順にソートするコードを追加。

void main() {
  List<String> alphabets = ['a', 'b', 'c', 'd', 'e'];
  List<int> indexes = [1, 2, 4];

+ indexes.sort();
+ indexes = indexes.reversed.toList();
  for (int index in indexes) {
    alphabets.removeAt(index);
  }
  
  print(alphabets);
}

降順にソートする方法について参考にした記事↓
https://qiita.com/yuuuuukou/items/82f83b1bec6b4d9ed849
https://mebee.info/2022/11/03/post-84760/

このスクラップは2023/05/27にクローズされました