我正在使用以下代码将制表符分隔的文本文件读入数组:
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非常新,所以希望解决方案很简单。
感谢。
答案 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")
而收到错误,即使您看到的字母未用双引号括起来,它们仍然是字符串。
然后,您还可以使用zipWithIndex
和filter
知道数组位置:
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]
。
建议提供更多代码,以便我们能够更多地帮助您尝试做些什么。