如何解决是否有Dart等效于Python的any方法?
我正在与Dart合作,我正在寻找一种与两个列表进行比较的方法,其中两个列表的长度相同,并且包含完全相同的项目。
在Dart中:
List<String> list1 = [Chris,Christina,David,Julia,Maria,Michael];
List<String> list2 = [];
list2 = List<String>.from(list1);
list2.shuffle();
现在,在将list2改组后,我想比较两个列表的项目。 我的目标是为第一个列表中的每个人分配第二个列表中的另一个人(不允许“自我分配”),因此每个人都应该获得另一个伙伴。 如果在第一次洗牌之后没有给出此条件,则应该再次(一次又一次)洗牌list2,直到条件ist满足。
我已经在Python中实现了 :
list1 = [Chris,Michael]
list2 = list1.copy()
random.shuffle(list2)
shuffle_var = any(a == b for a,b in zip(list1,list2))
while shuffle_var == True:
random.shuffle(list2)
shuffle_var = any(a == b for a,list2))
所以我基本上是在寻找python的“ any()”函数的等效项。 但是,也许对此有完全不同的方法。
一个约束是,不允许只是将list2的项的索引向上移动1:
List<String> list1 = [Chris,Michael];
List<String> list2 = [Michael,Chris,Maria];
希望你们明白我的意思。我真的是Dart的新手。
谢谢!
解决方法
在Dart中,Python的any
函数等效于Iterable.any
。
但是,对于您的特定问题,我将生成原始List
的{{3}}而不是改组它。您可以使用derangement生成一个排列混乱(尽管with a non-uniform distribution),该排列不允许交换元素本身。然后,您可以按元素将原始列表与排列顺序配对,并避免将任何元素与其自身配对。但是,您应该注意,使用进给法不能保证(A,B)对具有对应的(B,A)对。
如jamesdlin所述,您可以使用any
中的Iterable
方法。但这并不是您问题的完整解决方案。因此,这里有一个示例,说明我认为您可以使用与Python代码相同的概念来解决Dart中的问题:
void main() {
final list1 = ['Chris','Christina','David','Julia','Maria','Michael'];
final list2 = [...list1]..shuffle();
while (list2.asMap().entries.any((e) => list1[e.key] == e.value)) {
print('Need reshuffle!');
list2.shuffle();
}
print(list2); // [Maria,Chris,Michael,David,Christina,Julia]
}
使用asMap
是为了使我可以从index
中比较最终得到的每个元素的list1
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。