当前位置: 首页 > 知识库问答 >
问题:

返回按地图中键排序的值列表

暴辰龙
2023-03-14

我有一个映射 ,我希望在其中返回字符串值的列表,但按int键的升序/降序排序。如果返回的是我也希望排序的迭代项,例如返回map.keysmap.values列表,那么这将很容易,但是我想不出一种方法来做到这一点,除了在使用foreach()遍历整个映射并插入值以从映射键索引(如下面所示)之后手动创建一个列表,然后在该列表中嵌套另一个foreach()以消除任何空值之外。

Map<int, String> charMap = {2:'b', 1:'a', 4:'d'};
List<String> tempList = [];
List<String> charList = [];
charMap.forEach((key, value) => tempList.insert(key, value));
//tempList == ['a', 'b', '', 'd'];
charList = tempList..where((e) => e != null);
//charList == ['a', 'b', 'd'];

请告诉我有更好更有效的方法吗?任何帮助都是非常感谢的!

共有1个答案

干宏邈
2023-03-14

您可以创建一个排序键列表(keysasckeysdesc),然后遍历此列表以从map...

Map<int, String> charMap = {2: 'b', 1: 'a', 4: 'd'};
List<String> charList = [];

final keysAsc = charMap.keys.toList()..sort((a, b) => a.compareTo(b));
final keysDesc = charMap.keys.toList()..sort((a, b) => b.compareTo(a));

for (final key in keysAsc) {
  charList.add(charMap[key]);
}

print(charList);
 类似资料:
  • 问题内容: 我想在键和值上对地图进行排序。首先是关键,然后是价值。例如,这应该是结果; 有人对如何有效地实现这一目标有建议吗?我一直在看到人们使用TreeMap对键进行排序,但是我也需要值。 或者欢迎使用其他对键和值进行排序的方法。 问题答案:

  • 我的问题是如何根据值和键对内容进行排序,并得到一个? 首先,条目需要按值降序排序,如果值发生冲突,也要按键降序排序。 给定的示例: 预期订单:

  • 问题内容: 我正在使用map接口从文件中读取,然后将其中的值存储为键值对。文件格式如下 我将从该文件中读取数据并将其存储为键值对,然后将其显示给用户。我的要求是以这种格式显示结果 因此,我需要按值的降序对地图进行排序。这样我就可以将它们显示为我的结果..我已经阅读了有关此内容并找到了以下代码 我希望这将按升序对值进行排序,我只想知道此方法是否正确,或者其他有效方法对我有帮助? 问题答案: 由于您可

  • 问题内容: 在主题函数返回的代码中迭代返回的映射时,键未按顺序显示。 我如何才能使键按顺序排列/对地图进行排序,以使键按顺序排列并且值对应? 这是代码。 问题答案: 在围棋博客:去映射在行动中有极好的说明。 当使用范围循环在地图上进行迭代时,未指定迭代顺序,并且不能保证每次迭代之间都相同。从Go 1开始,运行时间会随机化映射迭代顺序,因为程序员依赖于先前实现的稳定迭代顺序。如果需要稳定的迭代顺序,

  • 问题内容: 我需要像TreeMap这样排序的地图,但按值排序。我的地图很大,所以我不能随时随地对我的地图进行排序。是否存在解决此问题的良好解决方案?也许存在外部罐子遇到这个? 问题答案: 有多种方法可以满足您的要求。正如您随后澄清的那样,您当前可能有重复的对象,也许您可​​以用第三方多重映射(Guava,Apache Commons Collections )替换您的对象,然后交换您的键和值- 即

  • 我的教授介绍了如何使用ArrayList创建Max Heap类。然后他让我们写一个maxHeapSort方法。我几乎成功地将堆按降序排序,但我假设排序应该按升序。现在我使用一个最大堆为[11,5,8,3,4,1]的ArrayList,它排序为[11,8,5,3,4,1]。 这是我的maxHeapSort代码: 下面是我的教授给出的heapifyDown方法: 这是我的测试代码: