1

我想创建一个成员地图,但每个成员都有 3 个属性:名字、姓氏和用户名。如何创建像列表一样的列表,但使用地图。

所以我想要类似的东西:

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

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

4

5 回答 5

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']);
});
于 2012-11-26T06:50:47.723 回答
2

如果我正确理解你的意图,你想要一张地图列表。你所拥有的是正确的,除了你感到困惑[{。以下作品:

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

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

print(membres.map((v) => v['username']));
于 2012-11-26T04:34:51.097 回答
1

If you don't really need a Map, what about using a class to improve the structure of your code :

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
}
于 2012-11-26T10:44:22.080 回答
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];
}
于 2012-11-26T08:52:38.737 回答
0

首先,您需要创建一个值作为列表的地图。不要忘记初始化它,然后如果要填充它,首先需要使用内置函数(如putIfAbsentdart)在列表中添加第一个对象,然后使用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;
    });
  }
于 2020-07-16T10:25:21.103 回答