Scala方式/处理不可变List的习语

时间:2013-05-01 15:42:49

标签: list scala immutability

我已经找到了使用不可变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)  
          }
      }
    }
}

1 个答案:

答案 0 :(得分:1)

以下是一些常规提示,因为这可能更适合codereview,并且发布的代码不完整,没有样本。

您可以使用模式匹配代替ifelse来检查尺寸。

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`
}