使用不可變列表時在內存中會發生什麼?使用不可變列表時在內存中會發生什麼?
是否在調用List.Append時執行深度複製?
什麼是用於描述F#列表的此操作的Big-O符號?
當將一個節點添加到列表的末尾時,它仍然是O(1)嗎?
如果不是,那麼如果使用不可變列表會違反鏈表的預期性能,爲什麼使用不可變列表會有用?
考慮下面的語句:
_modules <- _modules |> List.append moduleItems
源代碼:
type CreationViewModel() =
inherit ViewModelBase()
let mutable (_modules:Module list) = []
member this.Modules
with get() = _modules
and set(value) = _modules <- value
member this.Add moduleItem =
_modules <- moduleItem :: _modules
member this.AddList moduleItems =
_modules <- _modules |> List.append moduleItems
在您的特殊情況下,'[moduleItem]'是第一個列表,因此您的代碼等同於'_modules < - moduleItem :: _modules',並且不必要分配單個元素列表。 – Tarmil
@Tarmil編輯代碼以解決您的疑慮,並且符合問題的意圖。考慮刪除你的downvote。 –
@JamesHugard我不會因爲這個而失望,它仍然是一個有用的問題。事實上,這就是爲什麼我發佈這個評論而不是答案。 – Tarmil