Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在dart中重新排列贴图关键点?_Flutter_Dart - Fatal编程技术网

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];
}
这应该删除并重新添加每个键(如果有的话),按照您想要的顺序进行操作。

您需要执行的步骤:

  • 将映射转换为临时列表
  • 对列表进行编辑
  • 清除地图
  • 将列表中的条目复制回地图
  • **

    地图上的扩展扩展地图{ >void replace(int索引、字符串键、ChannelItem ChannelItem){ > >var tmpLst=this.entries.map((e)=>MapEntry(e.key,e.value)).toList(); > >tmpLst.removeAt(索引); >tmpLst.insert(索引,新映射条目(键,channelItem)); > >这个.clear(); > >tmpLst.forEach((mapEntry)=>this[mapEntry.key]=mapEntry.value); > } > } **您需要执行的步骤:

  • 将映射转换为临时列表
  • 对列表进行编辑
  • 清除地图
  • 将列表中的条目复制回地图
  • **

    地图上的扩展扩展地图{ >void replace(int索引、字符串键、ChannelItem ChannelItem){ > >var tmpLst=this.entries.map((e)=>MapEntry(e.key,e.value)).toList(); > >tmpLst.removeAt(索引); >tmpLst.insert(索引,新映射条目(键,channelItem)); > >这个.clear(); > >tmpLst.forEach((mapEntry)=>this[mapEntry.key]=mapEntry.value); > } > }
    **

    @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);
    >       }
    >     }