【问题标题】:Convert arrays to properties of a new class using the map operator使用 map 运算符将数组转换为新类的属性
【发布时间】:2020-01-23 15:21:15
【问题描述】:

我有两个数组/列表:

users =[object1,object2,object3];都是同一类型:Class User

teams =[object1,object2,object3];都是同一类型:Class Team

我想创建一个动态包含 SupportTeams 类型对象的新数组,该数组具有 User 和 Team 类型的属性。

我认为我应该使用 map 运算符将数组转换为我的新数组。

像这样的

List<SupportTeams> combiner(List<User> users, List<Team> teams) {
    return users.map((user) {
      teams.map((team) {
        SupportTeams(user,team);
      });
    }).toList();
  }

【问题讨论】:

    标签: arrays dart


    【解决方案1】:

    你快到了。首先,您需要在map 内回电:

    List<SupportTeams> combiner(List<User> users, List<Team> teams) {
        return users.map((user) {
          return teams.map((team) {
            return SupportTeams(user,team);
          });
        }).toList();
      }
    

    但是,这仍然不会 100% 有效,因为您将拥有一个列表列表。您需要使用expand 将结果展平:

    List<SupportTeams> combiner(List<User> users, List<Team> teams) {
        return users.map((user) {
          return teams.map((team) {
            return SupportTeams(user,team);
          });
        }).expand((i) => i).toList();
      }
    

    如果想要更简洁,可以使用=&gt; 表示法而不是返回:

    List<SupportTeams> combiner(List<User> users, List<Team> teams) =>
        users.map((user) =>
          teams.map((team) => 
            SupportTeams(user,team))).expand((i) => i).toList();
    

    最后,正如@lrn 在 cmets 中指出的那样,您可以使用控制流集合更干净地执行此操作:

    List<SupportTeams> combiner(List<User> users, List<Team> teams) => [
      for (var user in users)
        for (var team in teams)
          SupportTeams(user, team)
    ];
    

    【讨论】:

    • 你也可以这样做:var result = [for (var user in users) for (var team in teams) SupportTeams(user, team)];.
    • 啊当然!我完全忘记了... :-) 我将编辑答案以包含它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2014-07-08
    • 1970-01-01
    • 2019-04-11
    • 2012-09-26
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多