我已經寫了一個應用程序,並且有一段我不喜歡的代碼,雖然它工作正常。如何重新實現我的search(...)
以實現功能或根據Scala習慣用法?而且,在這種情況下,我如何最好地重構我的代碼以便用不可變列表替換Buffer?重構具有多個出口的Scala函數的建議
順便說一句,我沒有包含函數eliminate(...)
的實現。不過,它返回Map[Int, List[Int]]
謝謝。
def search(estimates : Map[Int, List[Int]]) : Map[Int, List[Int]] = {
if (estimates.forall{e => e._2.size == 1}) {
return estimates
} else if (estimates.exists(e => e._2.isEmpty)) {
Map.empty
} else {
val sortedEstimates = estimates.toList.sortBy{_._2.size}
val (pos, numbers) = sortedEstimates.find(_._2.size > 1).get
val numbersBuffer = numbers.toBuffer // find a way to use immutable collection
while (!numbersBuffer.isEmpty) {
val head = numbersBuffer.remove(0)
val result = search(eliminate(estimates.updated(pos, List(head)), pos, head))
if (result != Map.empty) return result
}
Map.empty
}
}
def eliminate(estimates : Map[Int, List[Int]], position : Int, num : Int) : Map[Int, List[Int]] = {...}
您可以通過採取從你第一次如果返回開始。 –
這個問題會更適合http://codereview.stackexchange。com/ –
已注意。 我讀http://stackoverflow.com/about,它提到的是請教一下 1.特定的編程問題 2.軟件算法 3.編碼技術的地方 4.軟件開發工具 – thlim