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

时间:2018-12-18 00:17:54

标签: dictionary dart flutter

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

例如:

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。

5 个答案:

答案 0 :(得分:6)

将值转换为列表

var _list = _results.values.toList();

通过索引获取:

print(_list[1]);

答案 1 :(得分:6)

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

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

地图不是成对列表,您无法按索引访问。

可以 Iterable s 的形式访问键,值和条目(键和值对)。

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 :(得分:1)

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

void main(){

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

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

答案 3 :(得分:0)

除了某些实现的偶然性,地图本质上是“无序的”。因此,没有“第一个”键/值对,因此您最初的问题没有道理。

答案 4 :(得分:0)

这是我在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());
  }