0
我发现使用不可变List的想法成功,但是当来到这片代码在这里我难倒。我发现自己已经写了比Java更多的Java而不是Scala风格。我宁愿用List(...)
代替Buffer(...)
但我不知道怎样才能通过相同的修改不可改变List
到下一个功能。 guesses
也在eliminate(...)
之内进行了修改。斯卡拉方式/成语
任何建议,以帮助我做这个做这个的斯卡拉方式表示赞赏。由于
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)
}
}
}
}
对于模式匹配的情况,更好的办法是尝试'结果匹配{case x :: Nil => //代码在if块中。我认为匹配列表本身的结构比检查大小更清晰,它使您能够立即访问列表的(单个)元素。 – 2013-05-01 16:33:23
匹配不能解决我的多重嵌套的if-s,并且从elminate创建一个新的List不起作用,因为我将在for循环中再次使用猜测。对不起,我错过了for循环,我已经修改我的代码,以反映 – thlim 2013-05-01 17:42:35
您可以使用替代'如果-else'语句与'match',然后重构。您可以使用递归而不是使用for循环。从'removed'中返回一个新的'List',并用新的列表调用你的函数。 – Brian 2013-05-01 18:13:15