2015-02-24 19 views
3

索引多維列表時出現奇怪的結果。採取以下例如:在飛鏢中爲多維列表建立索引時出現意外結果

void main() { 
    var multiList = new List.filled(4, new List.filled(4, "x")); 
    print(multiList); 
    // [[x, x, x, x], [x, x, x, x], [x, x, x, x], [x, x, x, x]] 
    multiList[2][1] = "A"; 
    print(multiList); 
    // [[x, A, x, x], [x, A, x, x], [x, A, x, x], [x, A, x, x]] 
    // Expected result: 
    // [[x, x, x, x], [x, x, x, x], [x, A, x, x], [x, x, x, x]] 
} 

當試圖替換索引[2] [1]的值,該值被放置在所有的子列表。

你知道這是爲什麼發生嗎?我怎樣才能得到預期的結果呢?

感謝您的幫助!

回答

5

我認爲你需要使用generate代替filled

var multiList = new List.generate(4, (i) => new List.filled(4, "x")); 

否則將創建並插入4次只有一個new List.filled(4, "x")。如果在內部列表中添加一個非基元類型,那麼也使用generate。

+0

感謝您的快速響應!這解決了我的問題,解釋也是有意義的。謝謝! – 2015-02-24 19:05:34