【问题标题】:Convert string to list of ints将字符串转换为整数列表
【发布时间】:2021-06-18 21:27:48
【问题描述】:

我有这样的字符串"1, 2, 3, 4, 5, 10, 23, 54"

我可以通过首先将其转换为字符串列表来做到这一点

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

然后我必须循环列表并将其转换为 int。
是否可以在一行中将上述字符串转换为 List

编辑 1:

我试过了

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

但我得到 'MappedListIterable' 不是类型 'List' 的子类型

编辑 2:

我找到了解决方案。不过我不是很清楚。

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

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

【问题讨论】:

  • @Mark Rotteveel,您编辑错误。它必须是string to List&lt;int&gt;。在一行中,单独使用 split 方法即可轻松转换为 List。
  • 我没有编辑它(我只是从标题中删除了标签,请参阅stackoverflow.com/posts/66742600/revisions),但 SO 将尖括号中的内容解释为 HTML 标签,但有时它们仅在随后的编辑,而不是在最初的帖子上。我解决了这个问题
  • 哦。好的先生...
  • 我认为在标题中加入 Dart 是个好主意。我收到了 Python 的答案
  • 不,这就是标签的用途,标签不属于标题。

标签: dart


【解决方案1】:

在使用 Map 方法时,它实际上返回的是 MappedIterable(在本例中为 MappedListIterable)(The documetation for this) 实例而不是 List,因此您需要将其强制转换为列表实例。

这就是添加 toList() 有效的原因,因为它实际上会将 MappedListIterable 转换为 List。

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

【讨论】:

    【解决方案2】:

    map 方法返回一个可迭代,而不是一个列表。它是惰性,所以如果你跟随map(...).first,它只会转换第一个元素。

    如果您添加.toList(),您会急切地从可迭代对象中提取所有值并创建一个包含这些值的列表。由于您要求的是列表,因此您需要这样做(可迭代不一定是列表)。

    另一种说法是:

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

    或者,您可以搭载 JSON 解码并执行以下操作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2012-05-08
      • 1970-01-01
      相关资源
      最近更新 更多