在Scala中读取文本文件时,数据类型无法正确读取

时间:2014-08-08 13:22:43

标签: arrays scala text-files

我正在使用以下代码将制表符分隔的文本文件读入数组:

val vars = io.Source.fromFile(filename).getLines.toArray.map(_.split('\11'))

我最终得到的是Array[Array[String]] = Array(Array(a,b,c,d), Array(e,f,g,h))

数组中的每个元素都是字符串,但它们没有用引号括起来,所以当我尝试像vars.indexOf(a)这样的东西时,我得到一个错误,因为Scala不知道'是'是什么。 Scala似乎认为a是一个尚未定义的变量名。

有没有办法让数组的元素作为字符串用引号括起来,还是有其他方法来引用数组的元素,以便Scala知道它在寻找什么?

我在Scala非常新,所以希望解决方案很简单。

感谢。

2 个答案:

答案 0 :(得分:3)

你有一个Array[Array[String]],你可以映射并获取一系列索引:

scala> Array(Array("a", "b", "c", "d"), Array("e", "f", "g", "h"))
res0: Array[Array[String]] = Array(Array(a, b, c, d), Array(e, f, g, h))


scala> res0.indexOf("a")
res1: Int = -1

scala> res0.map(_.indexOf("a"))
res2: Array[Int] = Array(0, -1)

另请注意,您可能会因为编写indexOf(a)而不是indexOf("a")而收到错误,即使您看到的字母未用双引号括起来,它们仍然是字符串。

然后,您还可以使用zipWithIndexfilter知道数组位置:

scala> res0.map(_.indexOf("g")).zipWithIndex.filter(_._1 != -1)
res3: Array[(Int, Int)] = Array((2,1))

元组中的第一个数字是字符串索引位置,第二个数字是包含字符串的数组。

答案 1 :(得分:0)

出于与任何其他语言相同的原因,

indexOf(a)将在Scala中失败 - 因为a是未定义的变量。你想要indexOf("a")。其次vars.indexOf("a")无效,因为vars的类型为Array[Array[String]],因此无法包含"a" - 它包含Array[String]

建议提供更多代码,以便我们能够更多地帮助您尝试做些什么。