以下是我在Firebase中的数据:
prices
price1
priceAmount1: 10
priceAmount2: 20
priceAmount3: 30
price2
priceAmount1: 15
priceAmount2: 5
priceAmount3: 7
price3
priceAmount1: 2
priceAmount2: 4
priceAmount3: 6
如果我马上把它找回来。有时排序是price2,price3,price1。所以我试着这样分类:
var sortedKeys = prices!.price!.keys.toList()..sort();
for (var it = 0; it < sortedKeys.length; it++) {
print('${sortedKeys[it]}');
}
但自从它变成了一个列表,我就不能再访问Map了。我想在一个Map中对Map进行排序,然后将其存储在一个列表中的列表中。请帮帮我谢谢你,谢谢
编辑:
final splayByPrice =
SplayTreeMap<dynamic, dynamic>((a, b) => a.compareTo(b));
List<Map<dynamic, dynamic>> priceAmountMap = [
{
'priceAmount1': 10,
'priceAmount2': 20,
'priceAmount3': 30,
},
{
'priceAmount1': 15,
'priceAmount2': 5,
'priceAmount3': 7,
},
{
'priceAmount1': 2,
'priceAmount2': 4,
'priceAmount3': 6,
}
];
Map<dynamic, Map<dynamic, dynamic>> priceMap = {
'price2': priceAmountMap[1],
'price1': priceAmountMap[0],
'price3': priceAmountMap[2],
};
priceMap.forEach((key, value) {
splayByPrice.addAll(value);
});
priceMap.forEach((key, value) {
print('$key \t $value');
});
它打印的内容仍然没有排序。
price2 {priceAmount1: 15, priceAmount2: 5, priceAmount3: 7}
price1 {priceAmount1: 10, priceAmount2: 20, priceAmount3: 30}
price3 {priceAmount1: 2, priceAmount2: 4, priceAmount3: 6}
1条答案
按热度按时间von4xj4u1#
Dart的默认
Map
实现是一个LinkedHashMap
,它按插入顺序存储条目。(You我还没有提供清楚地显示数据结构的代码,所以我将使用自己的示例。)
如果你希望
Map
按键的字母顺序排序,那么你可以:Map
,并按照所需的顺序向其中添加项目:或者,如果您想更新现有的
Map
,您可以清除现有的Map
并将其替换为已排序的条目。(我的dartbag
package在LinkedHashMap
上提供了一个sort
扩展方法来实现这一点。Map
,按所需顺序删除和重新添加项目:SplayTreeMap
,它按比较规则对条目进行排序。如果只需要对数据进行一次排序,我会使用前两种方法中的一种。如果您经常添加新条目,那么我会使用
SplayTreeMap
而不是Map
/LinkedHashMap
,以便条目以排序顺序保存。(但请注意,SplayTreeMap
中的查找,插入和删除是O(log n)而不是O(1)。if you're sorting strings that contain numbers, you probably don't want to use the normal string sort。