我目前正在打开我的文件,并使用.getLines从文件中检索每个单词,每个单词带有一个单词,其语音发音用两个空格隔开,我对如何映射单词及其含义感到困惑在Scala中读发音,因为我是该语言的新手。 我以前虽然曾利用将单词和它们的声音拆分和分离成不同的行,但是我迷路了
目前我是从
开始的
def words(filename: String, word: String): Unit = {
val file = Source.fromFile(filename).getLines().drop(56)
for(x <- file){
}
}
EX:
ARTI AA1 R T IY2
AASE AA1 S
ABAIR AH0 B EH1 R
AB AE1 B
结果:
Map("AARTI -> "AA1 R T IY2","AASE" -> "AA1 S", "ABAIR" -> " AH0 B EH1 R")
答案 0 :(得分:2)
" "
Array[Tuple[A, B]] => Map[A, B]
示例
val data =
"""
ARTI AA1 R T IY2
AASE AA1 S
ABAIR AH0 B EH1 R
AB AE1 B
""".stripMargin
val lines: Array[String] = data.split("\n").filter(_.trim.nonEmpty)
// if you are reading from file
// val lines = Source.fromFile("src/test/resources/my_filename.txt").getLines()
val res: Array[Tuple2[String, String]] = lines.map { line =>
line.split(" ") match { case Array(a, b) => a -> b }
}
println(res.toMap)
输出:
Map(ARTI -> AA1 R T IY2, AASE -> AA1 S, ABAIR -> AH0 B EH1 R, AB -> AE1 B)
运行示例-https://scastie.scala-lang.org/prayagupd/jBCnEhUPQJCMPKP9TXlgWA
答案 1 :(得分:1)
如果您的行位于file
中,则将从第一个单词到字符串的其余部分创建一个Map
:
val res: Map[String, String] = file.map(_.span(_.isLetter))(collection.breakOut)
Map
中的值将包含前导空格字符,因此您可能需要在使用它们之前调用trim
。
map
调用依次处理每一行。
span
方法将行拆分为元组,其中第一个值是您的单词,第二个值是行的其余部分。
使用collection.breakOut
告诉map
将结果直接放入Map
中,而不是通过中间数组或列表。