如何在Scala中将字符串转换为整数列表?

3

我有以下Scala字符串列表,我想将其转换为List(List(Int))

val listOfLines = ( "1  2   3   6   9",
                    "1  2   4   5   6",
                    "1  2   8   8   4",
                    "2  3   6   5   4",
                    "2  4   3   9   7" )

我想将其转换为以下格式:
              ( (1,2,3,6,9),
                (1,2,4,5,6),
                (1,2,8,8,4),
                (2,3,6,5,4),
                (2,4,3,9,7))

我该如何做这样的事情..我尝试过:

val list = listOfLines.foreach(_.map{(_.split("\t"))}.toList)

但是它给了我一个错误..有什么建议吗?

(注:此文本已经是中文,无需翻译)

2
你的例子 listOfLines 是一个元组,也许你想在括号前加上单词 List - Keith Pinson
3个回答

3
如果您想在任何空白处拆分,也可以这样做:
listOfLines.map(_.split("\\s+").map(_.toInt).toList)

这样你就不必仅依赖于存在于文本中的\t字符。

假设您的输入为

val listOfLines = List( "1  2   3   6   9",
  "1  2   4   5   6",
  "1  2   8   8   4",
  "2  3   6   5   4",
  "2  4   3   9   7" )

相对于你问题中的元组,本文提到的是...

1
最终,答案可以是 :)
val list = listOfLines.map(_.split("\t").toList.map(_.toInt))

1
如果您首次使用 Tuple,需要将其转换为 ListlistOfLines.productIterator.toList,然后您将获得 List[Any],因为 Tuple 可以由不同类型组成,这就是为什么 productIterator 返回 Iterator[Any]。现在您可以使用 map 进行操作,但不能使用 foreach,因为 foreach 返回 Unit。所以,结果是:
val res = listOfLines.productIterator.toList
  .map{ 
    _.toString.split("\\s+")
     .map(_.toInt)
     .toList
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接