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