首页 > 解决方案 > Scala 文件行映射

问题描述

我目前正在打开我的文件并使用 .getLines 从文件中检索每一行,其中包含一个单词及其由两个空格分隔的语音发音,我对如何在 Scala 中映射单词及其发音感到困惑因为我对这门语言还很陌生。我以前虽然使用拆分并将单词及其声音分成不同的行,但是,我迷路了

目前我开始

  def words(filename: String, word: String): Unit = {
    val file = Source.fromFile(filename).getLines().drop(56)
    for(x <- file){
      
    }

 }

前任:

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")

标签: scalascala-collections

解决方案


  • 迭代每一行
  • 除以 2 个空格" "
  • 创建一个 (a -> b) 的元组
  • 兑换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

如何在 Scala 中读取整个文件?


推荐阅读