【问题标题】:Insert object in between other objects Dart在其他对象之间插入对象 Dart
【发布时间】:2022-06-24 14:46:31
【问题描述】:

说我有

Map<String, double> list = {};
list.putIfAbsent("hello", () => 2.0);
list.putIfAbsent("hi", () => 5.0);
list.putIfAbsent("world", () => 8.0);

我怎样才能插入一个对象,使列表变成这样

"hello" = 2.0
"hi" = 5.0
"hi there" = 12.0
"world" = 8.0

我找到了“hi”对象,我只需要将它放在列表中的旁边即可。

谢谢!

【问题讨论】:

  • 您的list 变量不是列表,而是Map。一般来说,不应该假设地图中元素的顺序(特别是,正如您所发现的,如果没有完整的重新创建,很难在地图中保持特定的元素顺序)。但是,列表确实能够在特定索引处插入元素:api.dart.dev/stable/2.17.5/dart-core/List/insert.html
  • @julemand101 需要注意的是,在 Dart 中使用非常量字面量创建的映射将是 LinkedHashMap,因此顺序将是插入顺序。据我所知,没有办法按顺序将元素放入 aLinkedHashMap 的特定位置(除非您删除该位置之后的所有项目,然后在新元素之后重新添加它们)。
  • @Abion47 我完全同意。我关于顺序的陈述更多地是关于在对其进行更改时将创建的地图保持在某个指定顺序的问题,因为正如您还提到的那样,不能插入特定位置或进行任何排序。我们能做的最好的事情是SplayTreeMap,但这只是基于key 值的排序,并且仅在插入时进行。

标签: dart


【解决方案1】:

您的“列表”实际上是Map。 如果有问题的Map 是LinkedHashMap(字面量是),那么迭代的顺序由项目添加的顺序决定。

在特定位置插入项目的唯一方法是删除直到该点的所有项目,添加项目,然后将所有内容重新添加。

一个更简单的方法是删除每个项目,然后按照您想要的顺序将它们全部添加回来,如下所示:

list["hi there"] = 12.0;
final entries = list.entries.toList();
entries.insert(2, entries.removeLast());
list..clear()..addEntries(entries);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    相关资源
    最近更新 更多