Dart Setから条件を指定して値を削除する
Dartで、Setから条件を指定して値を削除するコードを記述してます。「removeWhere」を使用して削除します。また、「const」で宣言したsetに使用するとエラーとなります。
環境
- OS windows11 home
- Dart 2.18.4
要素を追加
要素を追加するには、「removeWhere」を使用します。
セット.removeWhere(条件)
実際に、使用して削除してみます。ここでは3文字以上の長さの文字列を削除してます。
void main() {
var set = {'aaa','b','cccc','ddddd','ee'};
set.removeWhere((v) => 2 < v.length);
print(set); // {b, ee}
}
実行結果を見ると、削除されていることが確認できます。
条件を満たす値が1つもなければ、何も削除されません。
void main() {
var set = {'aaa','b','cccc','ddddd','ee'};
set.removeWhere((v) => 10 < v.length);
print(set); // {aaa, b, cccc, ddddd, ee}
}
空のsetに使用するとエラーとなります。
void main() {
final set = {};
set.removeWhere((v) => 2 < v.length);
print(set);
// Error: The argument type 'bool Function(dynamic)' can't be assigned to the parameter type 'bool Function(dynamic, dynamic)'.
}
定数
「const」で宣言したリストを削除するとエラー「Unsupported operation: Cannot change an unmodifiable set」が発生します。
void main() {
const set = {'aaa','b','cccc','ddddd','ee'};
set.removeWhere((v) => 2 < v.length);
print(set);
}
Unhandled exception:
Unsupported operation: Cannot change an unmodifiable set
#0 _UnmodifiableSetMixin._throwUnmodifiable (dart:collection/set.dart:345:5)
#1 _UnmodifiableSetMixin.removeWhere (dart:collection/set.dart:364:45)
#2 main (file:///c:/sample/main.dart:4:7)
#3 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#4 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
「final」の場合は、メモリ領域は変更できるためエラーにはなりません。
void main() {
final set = {'aaa','b','cccc','ddddd','ee'};
set.removeWhere((v) => 2 < v.length);
print(set); // {b, ee}
}
remove
また、「set」から指定した値を削除する場合は「remove」を使用します。
void main() {
var set = {'aaa','bbb','ccc'};
set.remove('aaa');
print(set); // {bbb, ccc}
}
「removeAll」の場合は、setを指定して削除することができます。
void main() {
var set = {'aaa','bbb','ccc','ddd','eee'};
set.removeAll({'aaa','bbb','ccc'});
print(set); // {ddd, eee}
}
-
前の記事
kotlin エラー「error: no set method providing array access」の解決方法 2023.11.30
-
次の記事
EXCEL AVERAGE関数を使用するショートカットキー 2023.12.01
コメントを書く