Dart:根据条件将列表拆分为两个子列表

drnojrws  于 2023-06-03  发布在  其他
关注(0)|答案(2)|浏览(177)

有没有办法在dart中根据以下条件拆分列表:

[1, 2, 3, 4, 5, 6, 7, 8] (A sample list)

After splitting it based on i % 2 == 0 condition, 
it would generate the following two lists:
1) [1, 3, 5, 7]
2) [2, 4, 6, 8]

我知道我可以简单地编写一个循环来遍历所有元素并检查条件以创建两个子列表。但是dart中有没有更短的函数方式呢?先谢谢你了!

pod7payv

pod7payv1#

如果你想经常这样做,那么在你的项目中创建一个扩展方法来做你想做的事情可能是一个好主意。我提出了以下设计,应该以通用和有效的方式工作:

void main() {
  final s_list = [1, 2, 3, 4, 5, 6, 7, 8];
  final match = s_list.splitMatch((element) => element % 2 == 0);

  print(match.matched);   // [2, 4, 6, 8]
  print(match.unmatched); // [1, 3, 5, 7]
}

extension SplitMatch<T> on List<T> {
  ListMatch<T> splitMatch(bool Function(T element) matchFunction) {
    final listMatch = ListMatch<T>();

    for (final element in this) {
      if (matchFunction(element)) {
        listMatch.matched.add(element);
      } else {
        listMatch.unmatched.add(element);
      }
    }

    return listMatch;
  }
}

class ListMatch<T> {
  List<T> matched = <T>[];
  List<T> unmatched = <T>[];
}
rggaifut

rggaifut2#

一个快速的解决方案:

var s_list = [1, 2, 3, 4, 5, 6, 7, 8];

s_list.where( (el) => el % 2 == 0 ).toList();
s_list.where( (el) => el % 2 != 0 ).toList();

相关问题