Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 这可能是飞镖虫吗?_Dart - Fatal编程技术网

Dart 这可能是飞镖虫吗?

Dart 这可能是飞镖虫吗?,dart,Dart,当尝试使用带粗箭头的短符号更新映射中的字符串列表时,我得到“此表达式的类型为'void',无法使用。”错误。如果我不使用短符号,而是使用一个中间变量并返回它,它就可以正常工作 我正在尝试更新以下类型的地图: Map<String, List<List<String>>> mapWithAListOfListsOfStrings = {}; 这是我的工作环境: void main() { Map<String, List<List<Str

当尝试使用带粗箭头的短符号更新映射中的字符串列表时,我得到“此表达式的类型为'void',无法使用。”错误。如果我不使用短符号,而是使用一个中间变量并返回它,它就可以正常工作

我正在尝试更新以下类型的地图:

Map<String, List<List<String>>> mapWithAListOfListsOfStrings = {};
这是我的工作环境:

void main() {
  Map<String, List<List<String>>> mapWithAListOfListsOfStrings = {};
  String string1 = 'Lorem ipsum dolor sit amet';
  String string2 = 'consectetur adipiscing elit';

  for (String string in [string1, string2]) {
    List<String> splitString = string.split(' ');
    mapWithAListOfListsOfStrings.update('1', (list) {
      List<List<String>> returnList = list;
      returnList.add(splitString);
      return returnList;
    }, ifAbsent: () => [splitString]);
  }

  print("Map contains: ${mapWithAListOfListsOfStrings.toString()}");

}

void main(){
Map MapWithAlistOfListOfStrings={};
字符串string1='Lorem ipsum dolor sit amet';
字符串string2='concertetur adipising elit';
for(字符串[string1,string2]中的字符串){
List splitString=string.split(“”);
MapWithAlistOfListsofString.update('1',(列表){
列表返回列表=列表;
returnList.add(拆分字符串);
退货清单;
},ifAbsent:()=>[splitString]);
}
打印(“映射包含:${MapWithAlistOfListsofString.toString()}”);
}
这是期望的结果:

地图包含:{1:[[Lorem,ipsum,dolor,sit,amet],[Concertetur,Adipising,elit]}

我很高兴就这样离开。我只是想知道为什么第一种方法会出错


提前感谢。

问题确实在于
list.add
的返回类型无效,而不是列表本身。
update
方法要求其参数函数为提供的键返回新值,并且
=>list.add(…)
不这样做,它只返回void

您的解决方案可以简化为:

(list) {
  list.add(splitString);
  return list;
}
或:

(list) => list..add(splitString)
但真正的问题是你根本不应该使用
map.update
。该函数用于替换键的现有值,而不是在添加某些内容后保留列表值。您必须尽力再次返回值,而不是只使用不更改键值的函数(除非它不在这里)

我会这样写:

mapWithAListOfListOfStrings.putIfAbsent('1', () =>[]).add(splitString);
putIfAbsent
返回现有值,或者如果还没有值,则插入一个值,然后返回该值,因此实际上:

  • 确保我的
    映射['1']存在并且是一个列表
  • 执行
    map['1']。添加(拆分字符串)

它只需这样做,而无需查找两次
'1'

感谢您提供的全面且解释得很好的答案以及优雅的解决方案。非常感谢!
(list) => list..add(splitString)
mapWithAListOfListOfStrings.putIfAbsent('1', () =>[]).add(splitString);