gpt4 book ai didi

dart - 如何最好地实现可迭代的分区函数?

转载 作者:行者123 更新时间:2023-12-05 01:04:01 27 4
gpt4 key购买 nike

我已经非常喜欢 dart 的列表操作功能。但是,我经常发现自己需要一个“分区”函数,根据 bool 标准将列表分成两部分。含义,同.where ,但不会丢弃错误的。

明显的实现:

Iterable partition(Iterable list, filter) {
var matches = [];
var nonMatches = [];
list.forEach((e) {
if (filter(e)) {
matches.add(e);
} else {
nonMatches.add(e);
}
});
return [matches, nonMatches];
}

然而,我也越来越喜欢懒惰的可迭代对象 where正在返回。

另一种实现是使用集合:

Iterable partition(Iterable list, filter) {
var matches = list.where(filter);
var nonMatches = list.toSet().difference(matches.toSet()).toList();
return [matches, nonMatches];
}

我很高兴看到如何完成优雅的惰性实现(如果它很容易)。
我相信从列表中构造一个集合是 O(n)操作,所以这两种实现在效率上应该不会相差太大。对此需要评论。

更新
集合实现有缺陷。我不明白为什么它不起作用,但是 nonMatches不包含 matches 中未包含的所有数字.

最佳答案

怎么样:

Iterable partition(Iterable list, filter) {
return [list.where((e) => filter(e)), list.where((e) => !filter(e))];
}

问候
罗伯特

关于dart - 如何最好地实现可迭代的分区函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com