我正在尝试参考另一个列表对列表进行排序。考虑这个例子,
List<String> a = ["a", "b", "c"];
List<int> b = [2, 3, 1];
现在,我希望结果像这样
a = ["c", "a", "b"];
b = [1, 2, 3];
如何获得此结果?
答案 0 :(得分:1)
您可以通过创建一个Map
来实现此目的,该2
包含字母到您的数字的映射,即a
分配了3
,b
拥有{{ 1}}等。
现在,您可以正常地对列表进行排序,然后根据排序之前存储的映射重新创建其他列表:
main() {
List<String> letters = ["a", "b", "c"];
final List<int> numbers = [2, 3, 1];
final Map<int, String> mappings = {
for (int i = 0; i < numbers.length; i++)
numbers[i]: letters[i]
};
numbers.sort();
letters = [
for (int number in numbers) mappings[number]
];
print(letters); // [c, a, b]
print(numbers); // [1, 2, 3]
}
在此示例中,我将收集用于。 Dart 2.3
中引入了集合文字的语法。
Learn more。
您可以轻松地将其转过来,然后将数字映射到您的字母。看起来像这样:
main() {
final List<String> letters = ["a", "b", "c"];
List<int> numbers = [2, 3, 1];
final Map<String, int> mapping = {
for (int i = 0; i < letters.length; i++)
letters[i]: numbers[i]
};
letters.sort((a, b) => b.compareTo(a));
numbers = [
for (String letter in letters) mapping[letter]
];
print(letters); // [c, b, a]
print(numbers); // [1, 3, 2]
}
注意,在此我还通过转过compareTo
对字母进行了降序排列(默认情况下,a.compareTo(b)
由List.sort
。