gpt4 book ai didi

dart - Dart 图排序-基于列表值

转载 作者:行者123 更新时间:2023-12-03 04:14:14 26 4
gpt4 key购买 nike

最好的方法是对映射进行排序,其中键是字符串,值是整数列表。

var userVotes = {
"arbourn": [1, 0, 7],
"burun": [2, 9, 0, 1],
"niko": [1, 0, 3, 10],
};


排序是基于列表(值)进行的。
1.先赢更高的名单
2.如果值相同,则以长度较大的列表为准。
3.否则, map 没有变化(不是很重要)
预期输出为
var userVotes = {
"burun": [2, 9, 0, 1],
"arbourn": [1, 0, 7],
"niko": [1, 0, 3, 10],
};


性能标准-列表的长度限制为<= 100,键的数量<= 1000。

谢谢!

最佳答案

可以这样做:

import 'dart:collection';

void main() {
final userVotes = {
"arbourn": [1, 0, 7],
"burun": [2, 9, 0, 1],
"niko": [1, 0, 3, 10],
"niko2": [1, 0, 3, 10, 0],
};

final sortedMap =
LinkedHashMap.fromEntries(userVotes.entries.toList()..sort(sortMethod));

sortedMap.forEach((key, value) => print('$key: $value'));
}

int sortMethod(MapEntry<String, List<int>> e1, MapEntry<String, List<int>> e2) {
final l1 = e1.value;
final l2 = e2.value;
final minLength = l1.length > l2.length ? l2.length : l1.length;

for (var i = 0; i < minLength; i++) {
if (l1[i] > l2[i]) {
return -1;
} else if (l1[i] < l2[i]) {
return 1;
}
}

return l2.length.compareTo(l1.length);
}
哪个输出:
burun: [2, 9, 0, 1]
arbourn: [1, 0, 7]
niko2: [1, 0, 3, 10, 0]
niko: [1, 0, 3, 10]
编辑
由于对 map 进行排序实际上并不是那么好,因此更好的策略是将每个键值对转换为 UserVote对象,该对象将 compareTo实现为其他 UserVote对象。可以将这些对象放入列表中并进行排序。
import 'dart:collection';

class UserVote implements Comparable<UserVote> {
final String name;
final List<int> list;

const UserVote(this.name, this.list);

@override
int compareTo(UserVote o) {
final minLength = list.length > o.list.length ? o.list.length : list.length;

for (var i = 0; i < minLength; i++) {
if (list[i] > o.list[i]) {
return -1;
} else if (list[i] < o.list[i]) {
return 1;
}
}

return o.list.length.compareTo(list.length);
}

@override
String toString() => '$name: $list';
}

void main() {
final userVotes = {
"arbourn": [1, 0, 7],
"burun": [2, 9, 0, 1],
"niko": [1, 0, 3, 10],
"niko2": [1, 0, 3, 10, 0],
};

final listOfUserVotes =
userVotes.entries.map((e) => UserVote(e.key, e.value)).toList();

listOfUserVotes.sort();
listOfUserVotes.forEach(print);
}

关于dart - Dart 图排序-基于列表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61607106/

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