我想在Scala中創建通用(不變)方法,將元素從源列表複製到目標列表。在Java中有副本方法java.util.Collections(請參閱http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#copy%28java.util.List,%20java.util.List%29)。我知道在Scala List中是不可變的對象,所以我想創建並返回新的列表。將元素從一個列表複製到Scala中的另一個
我已經寫了下面的代碼:
def copy[T](dest:List[T], src:List[T]):List[T] = {
if(dest.length<src.length) throw new Exception("IndexOutOfBoundsException")
else if(src==Nil) dest
else {
var ret = dest
ret = dest.updated(0, src.first)
var i=1
val f:(T=>Unit) = a => {
if(i<src.length) ret=ret.updated(i, src(i))
i+=1
()
}
dest.foreach(f)
ret
}
}
但我認爲它可以寫更好。你能幫我寫更好的代碼嗎?提前致謝。
編輯:也許我表達不清楚我想做什麼。我有兩個列表(scala.collection.immutable.List),例如(長度= x)和dest(長度= y> = x)。我想先替換x元素dest列表中元素來自src列表。
得到什麼意思'scala.collection.immutable.List'?它是不可變的。無需複製它們。 – senia
根據你的編輯:你想在原地做? (例如,如果會有第三個列表,說明由於這樣的替換導致「更新」,你會不高興嗎?) –
這將是最好的做法。我有解決方案,但如果存在更好的解決方案,我很樂意看到它。 – Paul