列出Dart中Map的AS值

时间:2012-11-25 22:27:59

标签: list maps dart

我想创建一个成员地图,但每个成员都有3个名称:名字,姓氏和用户名。我如何创建像一个侦听列表,但是有一张地图。

所以我希望有类似的东西:

var membres= {['lastname': 'Bonneau',
              'firstname': 'Pierre',
              'username': 'mariobross'],
              ['lastname': 'Hamel',
               'firstname': 'Alex',
               'username': 'Queenlatifa'],
            };

如您所知,此代码不起作用。但它很好地解释了我想要做的事情。

5 个答案:

答案 0 :(得分:3)

我认为你在这里混淆了这两个结构。

阅读以下语言简介:http://www.dartlang.org/docs/dart-up-and-running/ch02.html#lists

列表是可以使用简写[...]语法表示的元素列表:

var list = [1, 2, "foo", 3, new Date.now(), 4];

而地图可以用大括号的简写语法表示:

var gifts = {                         // A map literal
// Keys       Values
  'first'  : 'partridge',
  'second' : 'turtledoves',
  'fifth'  : 'golden rings'
};

所以,让我们修改你的代码:

var members = [
  {
    'lastname': 'Bonneau',
    'firstname': 'Pierre',
    'username': 'mariobross'
  },
  {
    'lastname': 'Hamel',
    'firstname': 'Alex',
    'username': 'Queenlatifa'
  }
];

例如,您可以打印如下信息:

members.forEach((e) {
  print(e['firstname']);
});

答案 1 :(得分:2)

如果我理解你的意图,你想要一个地图列表。除了混淆[{之外,你所拥有的是正确的。以下作品:

var membres = [
          {'lastname': 'Bonneau',
           'firstname': 'Pierre',
           'username': 'mariobross'},
          {'lastname': 'Hamel',
           'firstname': 'Alex',
           'username': 'Queenlatifa'}
        ];

例如,要获取所有用户名的列表:

print(membres.map((v) => v['username']));

答案 2 :(得分:1)

如果您真的不需要Map,那么使用类来改进代码结构会怎么样:

class Member {
  String firstname;
  String lastname;
  String username;
  Member(this.firstname, this.lastname, this.username);
}

main() {
  final members = new List<Member>();
  members.add(new Member('Pierre', 'Bonneau', 'mariobross'));
  members.add(new Member('Alex', 'Hamel', 'Queenlatifa'));
  // use members
}

答案 3 :(得分:0)

你的意思是这样吗?

// FirstName => LastName => Value
var lookup = new Map<String, Map<String, String>>();

// get / set values like this
void setValue(String firstName, String lastName, String value) {
   if (!lookUp.containsKey(firstName)) 
       lookUp[firstName] = new Map<String, String>();
   lookUp[firstName][lastName] = value;
}

String getValue(String firstName, String lastName) {
   if (!lookUp.containsKey(firstName)) return "";
   return lookUp[firstName][lastName];
}

答案 4 :(得分:0)

首先,您需要创建一个值作为列表的地图。不要忘记初始化它 然后,如果要填充它,则首先需要使用内置功能(如dart中的putIfAbsent)在列表中添加第一个对象,然后使用update在列表中添加项目。因此,您将需要两个数组。首先放置元素,然后使用相同的键将元素添加到列表中。您也可以使用try catch来识别密钥是否存在

for (var item in days) {
    var date_time = DateTime.parse(item["date"] + " 00:00:00");
    _events[date_time] = _events.putIfAbsent(
        date_time,
        () => [
              {
                "title": item["title"],
                "date": item["date"],
                "time": reUse.get_time_am_pm_format(item["time"]),
                "feature": item["feature"],
              }
            ]);
  }
  for (var item in days) {
    var date_time = DateTime.parse(item["date"] + " 00:00:00");
    _events[date_time] = _events.update(date_time, (value) {
      value.add({
        "title": item["title"],
        "date": item["date"],
        "time": reUse.get_time_am_pm_format(item["time"]),
        "feature": item["feature"],
      });
      return value;
    });
  }