Я только что обнаружил, что пишу кусок кода, который выглядит следующим образом:
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, созданный из массива строк. Работает нормально. Я просто раньше не видел, чтобы такие понимания были вложенными. Это нормально или я должен как-то рефакториться?