gpt4 book ai didi

scala - 在 Scala 中嵌套 for-comprehensions 是一种好的风格吗?

转载 作者:行者123 更新时间:2023-12-01 10:09:23 26 4
gpt4 key购买 nike

我刚刚发现自己写了一段代码,看起来像这样:

  def language(frequencies: Array[String], text: Array[String]) = {
val allText = text.mkString.replace(" ", "")

val emaps = for {
fset <- frequencies
devs = for {
i <- 'a' to 'z'
p = fset.indexOf(i) match {
case -1 => 0d
case x => fset.substring(x + 1, x + 3).toDouble / 100 * allText.size
}
a = allText.count(i ==)
dev = math.pow(p - a, 2)
} yield dev
} yield devs.sum

emaps.min
}

如您所见,值 emaps 是从字符串数组创建的 double 组。它工作正常。我以前从未见过像这样嵌套的 for-comprehensions。可以吗,还是我应该以某种方式重构?

最佳答案

使用 map 和 friend 通常比在 for 结构的循环部分编写长代码块更标准。由于 allText 不依赖于频率,因此您可以在开始时执行一次:

val lcounts = 'a' to 'z' map {i => i -> allText.count(i==)} toMap
val emaps = frequencies.map { fset =>
val devs = 'a' to 'z' map { i =>
val p = fset.indexOf(i) match {
case -1 => 0d
case x => fset.substring(x+1, x+3).toDouble / 100 * allText.size
}
math.pow(p - lcounts(i), 2)
}
devs.sum
}

(此外,您确定要对负值进行平方吗,即 allText.count(i==) 为非零,但 fset.indexOf(i) 为 -1?这看起来很奇怪。)

关于scala - 在 Scala 中嵌套 for-comprehensions 是一种好的风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com