我有2個易變的串列
val line = mutableListOf<String> ()
val minesField = mutableListOf<MutableList<String> >()
這兩個串列的目的是創建一個由X和0(9*9)組成的內容表。
我有一個函式來創建line的內容,最后我把它添加到minesField的可變串列。
我試著用幾種方法來添加它,但都以相同的結果告終。
minesField.add(line)
minesField = line
minesField.addAll(listOf(line))
發生的情況是,我添加到minesField的最后一個行會重復到之前添加的所有行/串列中。因此在最后,我得到了一個與我添加的最后一行重復的9行表格。
我認為這不應該發生,因為函式 = .add()只為新添加的串列/行創建一個新的索引,它不會在整個串列中重復。
如何解決這個問題?
uj5u.com熱心網友回復:
我假設你使用完全相同的line物件重復執行minesField.add(line)。
重點是。minesField.add(line)并沒有將line的內容復制到minesField。它是將line物件本身添加到其中。如果您隨后修改line,您也將修改minesField的內容。結果是,你最終得到的minesField包含了對完全相同的line物件的9個參考。
您需要為每一個新的行創建一個新的line物件,或者您需要在添加到minesField之前通過使用來創建一個副本。line.toList()。
uj5u.com熱心網友回復:
你說:
我認為這不應該發生,因為函式 = .add()只為新添加的串列/行創建一個新的索引。
這一點是正確的。然而,新的元素與所有其他元素一樣指向同一個line物件,因為你為所有的行使用了一個物件。因此,舉例來說:
minesField.add(line)
minesField.add(line)
使minesField成為對同一個串列的兩個參考(與line參考的串列物件相同)。
讓每一行都參考一個唯一的物件并避免重復的一種方法是,每次添加一個line的copy:
minesField.add(line.toMutableList() )
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311874.html
標籤:
