dart 将字符串转换为整数列表

lc8prwob  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(238)

我有一个字符串"1, 2, 3, 4, 5, 10, 23, 54"
我可以先把它转换成字符串列表

List<String> list = str.split(",");

然后我必须循环列表并将其转换为int。
是否可以将上面的字符串转换为一行中的List? in one line?
编辑1:
我试过了

List<int> ints = "1,2,3".split(",").map((i) => int.parse(i));

但我得到的'MappedListIterable〈String,int〉'不是类型'List'的子类型
编辑二:
我找到解决办法了。但我不是很清楚。

List<int> ints = "1,2,3".split(",").map((i) => int.parse(i)).toList();

这就解决了问题。但是在dart中添加toList()和不添加toList()有什么区别呢?有人能解释一下吗?

cetgtptt

cetgtptt1#

当使用Map方法时,它实际上返回一个MappedIterable(在本例中为MappedListIterable)(The documentation for this)示例而不是List,因此需要将其转换为一个list示例。
这就是为什么添加**toList()**是有效的,因为它实际上将MappedListIterable转换为List。

List<int> ints = "1,2,3".split(",").map((i) => int.parse(i)).toList();
cdmah0mi

cdmah0mi2#

map方法返回一个 iterable,而不是一个列表,它是 lazy,所以如果你在map(...)后面跟.first,它只会转换第一个元素。
如果添加.toList(),那么您将急切地从可迭代对象中提取所有值,并创建一个包含这些值的列表,因为您要求的是列表,所以您需要这样做(可迭代对象不一定是列表)。
另一句俏皮话是:

List<int> ints = [for (var n in string.split(",")) int.parse(n)];

或者,您可以在JSON解码的基础上执行以下操作:

import "dart:convert";
...
list<int> ints = jsonDecode("[$string]");

相关问题