在 Dart 中无法正确转换 Map

问题描述 投票:0回答:1

应该是一个基本的方法,但是即使在检查了很多问答并尝试了很长一段时间后,我还是没有成功。

我想从每个包含 String 和 bool 的对象列表中生成

Map<String, bool>

如果我对现有地图进行转换,一切都会正常(

firstT
在下面的代码/输出中)。但是,以对象列表作为输入,转换结果
second1
看起来并不像预期的那样(与
firstT
相比)。
second2
third1
会在运行时(而不是之前)导致脚本错误。

如何获得预期结果?为什么我的方法不起作用?

void main() {
  
  final Map<Object, Object> first = <Object, Object>{'a': true, 'b': false};
  final Map<String, String> firstT = Map<String, String>.of(first.map((l,r) 
      => MapEntry(l.toString(), r.toString())));
  print ("$first - $firstT"); 
  
  final abc = [[ABC("a", true), ABC("b", true)],[ABC("a", false), ABC("b", false)]];
  final Map<dynamic, dynamic> second1 = Map<dynamic, dynamic>.fromIterable(abc[0].map((a) 
      => MapEntry(a.id, a.isit)));
  print("$second1");

  final Map<dynamic, dynamic> third1 = Map<dynamic, dynamic>.from(abc[0].map((a) 
    {print("${a.id} ${a.isit}");
     return MapEntry("a.id", true);
    }) as Map );  
  print ("$third1"); 

  final Map<String, bool> second2 = Map<String, bool>.fromIterable(abc[0].map((a) 
      => MapEntry(a.id, a.isit)));
  print("$second2");
}

class ABC {
  ABC(this.id, this.isit);
  final String id;
  final bool isit;
}

输出

{a: true, b: false} - {a: true, b: false}
{MapEntry(a: true): MapEntry(a: true), MapEntry(b: true): MapEntry(b: true)}
Script error.
arrays dart dictionary transformation
1个回答
0
投票

刚刚“发现”了一个新方法 -

fromEntries

这似乎可以完成工作,将对象列表转换为地图

final Map<String, bool> second3 = Map<String, bool>.fromEntries(abc[0].map((a) 
  => MapEntry(a.id, a.isit)));

这里是评论中@jamesdlin 更容易阅读的版本

final Map<String, bool> second2 = 
   {for (final obj in abc[0]) obj.id: obj.isit};

我留下问题,以防它帮助其他人解决这个问题

© www.soinside.com 2019 - 2024. All rights reserved.