Flutter/Dart:如何访问地图/对象中的单个条目

Posted

技术标签:

【中文标题】Flutter/Dart:如何访问地图/对象中的单个条目【英文标题】:Flutter/Dart: How to access a single entry in a map/object 【发布时间】:2019-05-18 09:10:58 【问题描述】:

这可能是一个非常简单的问题,但我很难找到答案。 我有一个对象/映射,我不想迭代但访问索引处的特定键/值。

例如:

var _results = 
  'Key_1' : 'Value_1',
  'Key_2' : 'Value_2', 
;

如何访问索引[1] 的 key_2 和 value_2?

我试过_results[index]_results[index].value_results[index].key_results[index].toString(),但都返回null。

【问题讨论】:

【参考方案1】:

地图允许通过键查找值。所以:

print(_results["Key_1"]);  // prints "Value_1"

地图不是对的列表,您不能通过索引访问。

可以Iterables 的身份访问键、值和条目(键和值对)。

for (var key in _results.keys) print(key); // prints Key_1 then Key_2
for (var value in _results.values) print(value); // prints Value_1 then Value_2
for (var entry in _results.entries) 
  print(entry.key);
  print(entry.value);

如果您真的想按整数索引,您甚至可以将条目转换为列表:

var entryList = _results.entries.toList();
print(entryList[0].key);  // prints "Key_1"

不过,这并不是地图的设计和优化目的。您编写的映射文字将按照它们在源中出现的顺序迭代条目及其键和值,但并非所有映射都保证这一点。如果您确实需要成对的字符串列表,我建议您从一开始就制作数据,而不是使用地图。它很可能会更有效,并且可能更易于阅读。

【讨论】:

【参考方案2】:

将值转换为List:

var _list = _results.values.toList();

按索引获取:

print(_list[1]);

【讨论】:

这行得通,谢谢!但是,如果不将其更改为列表,是否没有明确的访问方式?这是因为我正在尝试访问 listViewItemBuilder 中的对象项目,该项目已经在使用索引迭代对象 []。 试试_results.values.first_results.values.elementAt(0)。对于高于零的位置,它不一定很快(对于_results.values.elementAt(n),它可能只会迭代直到它看到n 值)。【参考方案3】:

要打印键的值,只需使用:

void main()

  var results = 
  'usd' : 3.80,
  'eur' : 4.10, 
  'gbp' : 4.90, 
  ;

  print(results['usd']); //3.80

【讨论】:

这个答案有点像@lrn 的答案,但我想接触那些需要一个非常简单的例子的人。【参考方案4】:

地图本质上是“无序的”,除了某些实现的意外。所以没有“第一个”键/值对,所以你原来的问题没有意义。

【讨论】:

【参考方案5】:

这就是我在flutter中访问列表中的对象的方法:

getOrderType() async
    setState(() 
      order.add(new OrderTransactionTypeModel("1", "table", "TABLE"));
      order.add(new OrderTransactionTypeModel("10", "freeTable", "FREE TABLE"));
      order.add(new OrderTransactionTypeModel("7", "jasa", "JASA"));
      order.add(new OrderTransactionTypeModel("2", "bungkus", "BUNGKUS"));
      order.add(new OrderTransactionTypeModel("4", "delivery", "DELIVERY"));
      order.add(new OrderTransactionTypeModel("6", "ojekOnline", "OJEK ONLINE"));
      order.add(new OrderTransactionTypeModel("11", "reservasi", "RESERVASI"));
      order.add(new OrderTransactionTypeModel("99", "lainnya", "LAINNYA"));

      var mappedOrder = order.map((n) => 'Id: $n.orderId name: $n.orderName');
    );

    print(mappedOrder.toString());
  

【讨论】:

以上是关于Flutter/Dart:如何访问地图/对象中的单个条目的主要内容,如果未能解决你的问题,请参考以下文章

如何正确覆盖一个类,以便在 Flutter [Dart] 中唯一地添加到地图中

Flutter/Dart 从 Firestore 投射到地图中

Flutter/Dart 类实例和类变量

Flutter / Dart:地图列表与小部件列表?哪个更好?

你如何在flutter.dart中连续检查互联网访问,而不是连接[重复]

如何访问和更改在 FLUTTER/DART 的另一个类中声明的字符串变量的值