如果在 dart 中存在,则获取列表的第一个元素

dsh*_*tjr 4 arrays list dart

我想知道是否有办法访问 dart 中列表的第一个元素,如果一个元素存在,否则返回 null。

首先,我认为这可以完成这项工作:

final firstElement = myList?.first;
Run Code Online (Sandbox Code Playgroud)

如果 myList 为空或 myList.length > 0,这有效,但如果 myList 是空列表,则会给我一个错误。

我想我可以做这样的事情:

final firstElement = (myList?.length ?? 0) > 0 ? myList.first : null;
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种更简单的方法来做我想做的事情。

Edw*_*Liu 14

现在你可以导入package:collection和使用扩展方法 firstOrNull

import 'package:collection/collection.dart';

void main() {

  final myList = [];

  final firstElement = myList.firstOrNull;

  print(firstElement); // null
}
Run Code Online (Sandbox Code Playgroud)


bar*_*nus 9

对于 Dart 2.12(具有空安全性),添加扩展函数可能是一个好主意:

extension MyIterable<T> on Iterable<T> {
  T? get firstOrNull => isEmpty ? null : first;

  T? firstWhereOrNull(bool Function(T element) test) {
    final list = where(test);
    return list.isEmpty ? null : list.first;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 在 `firstWhereOrNull` 中为什么不直接重用 `firstOrNull` 呢?'T?firstWhereOrNull(bool Function(T 元素) test) =&gt; where(test).firstOrNull;` (2认同)

Mrb*_*b83 3

注意List<T>.firstOrNull在 Dart >= 3.0.0 中可用,package:collection不再需要。