Flutter 如何在dart中重新排列贴图关键点?
我有一张如下的地图:Flutter 如何在dart中重新排列贴图关键点?,flutter,dart,Flutter,Dart,我有一张如下的地图: { "Future": [ { "accountId": 57, "firstName": "Inez", "lastName": "Mitchell", "middleName": "J", } ], "Overdue": [ { "accountId": 5, "firstName": "Mak", "lastName": "Mitchell", "middleName": "M", } ], "Due Today": [ {
{
"Future": [
{
"accountId": 57,
"firstName": "Inez",
"lastName": "Mitchell",
"middleName": "J",
}
],
"Overdue": [
{
"accountId": 5,
"firstName": "Mak",
"lastName": "Mitchell",
"middleName": "M",
}
],
"Due Today": [
{
"accountId": 59,
"firstName": "Jack",
"lastName": "Daniel",
"middleName": "P",
}
]
}
并希望按照以下顺序绘制地图,先到期,后过期,最后到期
{
"Due Today": [
{
"accountId": 59,
"firstName": "Jack",
"lastName": "Daniel",
"middleName": "P",
}
],
"Overdue": [
{
"accountId": 5,
"firstName": "Mak",
"lastName": "Mitchell",
"middleName": "M",
}
],"Future": [
{
"accountId": 57,
"firstName": "Inez",
"lastName": "Mitchell",
"middleName": "J",
}
]
}
同样,这些钥匙的长度是3,但有时我们只有两个,这意味着今天和未来到期,但我们必须确保顺序像1。今天到期2。过期3。未来没有简单地重新排列普通省道图迭代顺序的操作
var keys = abc.keys.toList()..shuffle();
for(var k in keys) {
print('$k, ${abc[k]}');}
Dart贴图通常默认使用LinkedHashMap
,它以键插入顺序排列其元素(例如用于迭代)
如果关键点已经存在,更改其值不会更改关键点在迭代顺序中的位置,但添加的任何新关键点都将在所有现有关键点之后结束。
这提供了更改迭代顺序的唯一有效方法:移除键并再次添加,这将使其位于迭代顺序的末尾,而不是之前的位置
因此,要对贴图重新排序,最简单的方法是创建一个新贴图:
var newMap = <String, List<Map<String, String>>>{};
for (var key in ["Due Today", "Overdue", "Future"]) {
if (map.containsKey(key)) newMap[key] = map[key];
}
这应该删除并重新添加每个关键点(如果有的话),并按照您想要的顺序进行。没有简单地重新排列普通省道贴图的迭代顺序的操作 Dart贴图通常默认使用
LinkedHashMap
,它以键插入顺序排列其元素(例如用于迭代)
如果关键点已经存在,更改其值不会更改关键点在迭代顺序中的位置,但添加的任何新关键点都将在所有现有关键点之后结束。
这提供了更改迭代顺序的唯一有效方法:移除键并再次添加,这将使其位于迭代顺序的末尾,而不是之前的位置
因此,要对贴图重新排序,最简单的方法是创建一个新贴图:
var newMap = <String, List<Map<String, String>>>{};
for (var key in ["Due Today", "Overdue", "Future"]) {
if (map.containsKey(key)) newMap[key] = map[key];
}
这应该删除并重新添加每个键(如果有的话),按照您想要的顺序进行操作。您需要执行的步骤:
**@irn所以,基本上我们不能修改钥匙在地图中的位置,对吗?一般来说不行。您可以删除该键并再次添加它,这将重新排列该键到迭代顺序的末尾(对于插入顺序映射)。这是更改迭代顺序的唯一可用方法。没有按特定顺序重新排列键的“排序”操作。@Irn好的,知道了。@Irn所以,基本上我们不能修改键在地图中的位置,对吗?一般不可以。您可以删除该键并再次添加它,这将重新排列该键到迭代顺序的末尾(对于插入顺序映射)。这是更改迭代顺序的唯一可用方法。没有按特定顺序重新排列键的“排序”操作。@Irn ok得到它。
> extension ExtensionsOnMap on Map<String, ChannelItem> {
> void replace(int index, String key, ChannelItem channelItem) {
>
> var tmpLst = this.entries.map((e) => MapEntry(e.key, e.value)).toList();
>
> tmpLst.removeAt(index);
> tmpLst.insert(index, new MapEntry(key, channelItem));
>
> this.clear();
>
> tmpLst.forEach((mapEntry) => this[mapEntry.key] = mapEntry.value);
> }
> }