gpt4 book ai didi

sorting - 如何使用另一个列表中项目的顺序对字符串列表进行排序?

转载 作者:行者123 更新时间:2023-12-01 13:50:15 25 4
gpt4 key购买 nike

我想通过使用另一个列表中条目的顺序作为排序引用来对字符串列表(可能有重复的条目)进行排序。所以,下面的列表就是我要排序的列表

List<String> list =  ['apple','pear','apple','x','x','orange','x','pear'];

而指定顺序的列表是

List<String> order = ['orange','apple','x','pear'];

输出应该是

List<String> result = ['orange','apple','apple','x','x','x','pear','pear'];

有没有一种干净的方法来做到这一点?

我不明白我是否可以使用列表的sortcompare 解决以下问题。我尝试使用 mapiterableintersection

最佳答案

可能有更有效的方法,但至少你得到了想要的结果:

main() {
List<String> list = ['apple','pear','apple','x','x','orange','x','pear'];
List<String> order = ['orange','apple','x','pear'];
list.sort((a, b) => order.indexOf(a).compareTo(order.indexOf(b)));
print(list);
}

试试DartPad

传递给 list.sort(...) 的闭包是一个自定义比较器,它不是比较传递的项目,而是比较它们在 order 中的位置并返回结果.

使用 map 以获得更好的查找性能:

main() {
List<String> list = ['apple','pear','apple','x','x','orange','x','pear'];
List<String> orderList = ['orange','apple','x','pear'];
Map<String,int> order = new Map.fromIterable(
orderList, key: (key) => key, value: (key) => orderList.indexOf(key));
list.sort((a, b) => order[a].compareTo(order[b]));
print(list);
}

试试DartPad

关于sorting - 如何使用另一个列表中项目的顺序对字符串列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32372678/

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