Dart Setで条件に一致する最初の値を取得する
Dartで、Setで条件に一致する最初の値を取得するコードを記述してます。「firstWhere」に条件を指定することで取得できます。条件に一致する値がない場合はエラーとなります。エラー時に返す値を指定したい場合は「orElse」を使用します。
環境
- OS windows11 home
- Dart 2.18.4
条件に一致する最初の値を取得
条件に一致する最初の値を取得するには「 firstWhere 」を使用します。
set.firstWhere(条件)実際に、使用して値を取得してみます。
ここでは「startsWith」で、先頭の値が「b」と「c」という2つの条件を指定します。
void main() {
var set = {'apple', 'banana', 'busy', 'arrow', 'cd', 'coffee'};
print(set.firstWhere((v) => v.startsWith('b')));
// banana
print(set.firstWhere((v) => v.startsWith('c')));
// cd
}実行結果を見ると、値が取得されていることが確認できます。

値が存在しない条件を指定するとエラーとなります。
void main() {
var set = {'apple', 'banana', 'busy', 'arrow', 'cd', 'coffee'};
print(set.firstWhere((v) => v.startsWith('z')));
}
Unhandled exception:
Bad state: No element
#0 SetMixin.firstWhere (dart:collection/set.dart:236:5)
#1 main (file:///c:/sample/main.dart:4:13)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)orElse
「orElse」を指定することで、値が存在しない場合に返す値を指定することが可能です。
void main() {
var set = {'apple', 'banana', 'busy', 'arrow', 'cd', 'coffee'};
print(set.firstWhere((v) => v.startsWith('z'),orElse: () => 'Nothing')); // Nothing
}ただし「null」を指定するとエラーが発生します。
void main() {
var set = {'apple', 'banana', 'busy', 'arrow', 'cd', 'coffee'};
print(set.firstWhere((v) => v.startsWith('z'), orElse: () => null)); // Nothing
}パッケージ「collection.dart」
「dart.dev」に公開されている「collection.dart」の「firstWhereOrNull」を使用すれば「null」を返すことが可能になります。
最新版はこちらで確認できます。「pubspec.yaml」がなければ作成して以下を追加して使用します。
name: sample
dependencies:
collection: ^1.17.0
environment:
sdk: '>=2.10.0 <3.0.0'実際に使用して「null」を返してみます。
import 'package:collection/collection.dart';
void main() {
var set = {'apple', 'banana', 'busy', 'arrow', 'cd', 'coffee'};
print(set.firstWhereOrNull((v) => v.startsWith('e'),)); // null
print(set.firstWhereOrNull(
(v) => v.startsWith('b'),
));
// banana
}値が存在しない場合は「null」が返っていることが確認できます。
-
前の記事
Google Colaboratory 実行を中断するショートカットキー 2025.03.27
-
次の記事
Oracle Database テーブル同士を比較して重複データを取得する 2025.03.27
コメントを書く