【问题标题】:Get the first element of list if it exists in dart获取列表的第一个元素(如果它存在于 dart 中)
【发布时间】:2020-02-15 04:21:57
【问题描述】:

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

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

final firstElement = myList?.first;

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

我想我可以这样做:

final firstElement = (myList?.length ?? 0) > 0 ? myList.first : null;

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

【问题讨论】:

    标签: arrays list dart


    【解决方案1】:

    正如您可能已经猜到的那样,您需要自己实现此类功能,并且由于this 和/或this 仍然开放,因此没有简约版本(即通过扩展函数)。

    所以我们应该做更长的版本:

    E firstOrNull<E>(List<E> list) {
      return list == null || list.isEmpty ? null : list.first;
    }
    

    编辑:正如@Mattia 所述,2.6 版(目前处于测试阶段)中将支持静态扩展功能。

    【讨论】:

    • 从 Dart 2.6 开始(目前处于测试阶段),可以使用 Static Extensions Methods ( github.com/dart-lang/language/issues/41 ):extension MyList&lt;T&gt; on List&lt;T&gt; { T get firstOrNull =&gt; this.isEmpty ? null : this.first; }
    【解决方案2】:

    对于 Dart 2.12(具有 null-safety)添加扩展函数可能是个好主意:

    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;
      }
    }
    

    【讨论】:

      【解决方案3】:

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

      import 'package:collection/collection.dart';
      
      void main() {
      
        final myList = [];
      
        final firstElement = myList.firstOrNull;
      
        print(firstElement); // null
      }
      

      【讨论】:

      • 这是真正的答案!非常感谢!
      猜你喜欢
      • 1970-01-01
      • 2016-12-31
      • 2020-07-31
      • 2012-08-21
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多