我已经找到了使用不可变List的想法的成功,但是在这里得到这段代码时我很难过。我发现自己写的东西比Scala风格更多。我更愿意使用List(...)
而不是Buffer(...)
,但我不知道如何将相同的修改后的不可变List
传递给下一个函数。 guesses
内也修改了eliminate(...)
。
有任何建议可以帮助我做这个Scala方式,这是值得赞赏的。感谢
val randomGuesses = List(...) // some long list of random integers
val guesses = randomGuesses.zipWithIndex.toBuffer
for ( s <- loop()) {
val results = alphaSearch(guesses)
if (results.size == 1) {
guesses(resultes.head._2) = results.head._1
eliminate(guesses, resultes.head._2)
}
else {
val results = betaSearch(guesses)
if (results.size == 1) {
guesses(resultes.head._2) = results.head._1
eliminate(guesses, resultes.head._2)
} else {
val results = betaSearch(guesses)
if (results.size == 1) {
guesses(resultes.head._2) = results.head._1
eliminate(guesses, resultes.head._2)
}
}
}
}
答案 0 :(得分:1)
以下是一些常规提示,因为这可能更适合codereview,并且发布的代码不完整,没有样本。
您可以使用模式匹配代替if
和else
来检查尺寸。
results.size match{
case 1 => ... //Code in the if block
case _ => ... //Code in the else block
}
而不是改变guesses
,而是创建一个新的List
。
val newGuesses = ...
然后将newGuesses
传递给eliminate
。
最后,eliminate
似乎修改了guesses
。更改此项以返回新列表。 e.g。
def eliminate(list: List[Int]) = {
//Eliminate something from list and return a new `List`
}