use*_*335 3 sorting algorithm dart flutter
我正在尝试参考另一个列表对列表进行排序。考虑这个例子,
List<String> a = ["a", "b", "c"];
List<int> b = [2, 3, 1];
Run Code Online (Sandbox Code Playgroud)
现在,我希望结果是这样的,
a = ["c", "a", "b"];
b = [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)
我怎样才能达到这个结果?
您可以通过创建一个Map保存字母到您的数字的映射来实现这一点,2即已a分配给它,3拥有b等。
现在您可以正常排序您的列表,然后根据您在排序之前存储的映射重新创建您的其他列表:
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]
}
Run Code Online (Sandbox Code Playgroud)
我在这个例子中使用了集合。这种集合文字的语法是在 Dart 中引入的2.3。
了解更多。
您可以轻松地将其转换为将数字映射到您的字母。那看起来像这样:
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]
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里也通过旋转以降序对字母进行了排序compareTo(默认情况下a.compareTo(b)由 使用List.sort)。
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |