在鏢

2013-02-23 64 views
1

玉傢伙決策矩陣,我已經嘗試過這樣的:今天在鏢

List<num> test 
for(num i = ...){ 
    test[i]... 
    (...) 
    for(num j = ...){ 
     test[i][j] = ... 
    } 
} 

,但似乎沒有工作。我的問題是...在Dart有沒有辦法做到這一點? :)

回答

3

下面是做到這一點的一種方法:

main() { 
    List<List<int>> matrix = new List<List<int>>(); 
    for (var i = 0; i < 10; i++) { 
    List<int> list = new List<int>(); 

    for (var j = 0; j < 10; j++) { 
     list.add(j); 
    } 

    matrix.add(list); 
    } 

    print(matrix); 
    print(matrix[2][4]); 
} 

如果您知道長的時間提前,也不會改變,你可以使用fixedLength構造:

main() { 
    int size = 10; 
    List<List<int>> matrix = new List<List<int>>.fixedLength(size); 
    for (var i = 0; i < size; i++) { 
    List<int> list = new List<int>.fixedLength(size); 

    for (var j = 0; j < size; j++) { 
     list[j] = j; 
    } 

    matrix[i] = list; 
    } 

    print(matrix); 
    print(matrix[2][4]); 
} 

注意主要區別。在第一個例子中,列表被創建爲空,所以循環需要顯式地向列表添加元素。在第二個例子中,列表是以固定大小創建的,每個索引都有空元素。

+0

這正是我在做的樣子,只是想知道是否有另一種方式,謝謝;) – 2013-02-23 04:30:31

+1

我認爲fixedLength命名構造函數消失在1.0版本。您現在只需將該長度作爲構造函數的參數。 – 2013-12-15 20:24:27

1

有用於處理矩陣(像凱文·摩爾的BOT例如)在pub一些優秀的庫,但如果你想找的東西快,你可以這樣做:

List<List> test = new List<List>(n); 
for (var i = 0; i < n; i++) { 
    test[i] = new List(n); 
} 

for (var i = 0; i < n; i++) { 
    for (var j = 0; j < n; j++) { 
    test[i][j] = myValue; 
    } 
} 
+0

這似乎是一個有趣的圖書館工作...我肯定要看看,謝謝;) – 2013-02-23 04:34:56

3

一種方式來構造列表,在每個位置具有不同的值是使用成語 new Iterable.generate(size, function).toList()

makeMatrix(rows, cols) => 
    new Iterable<List<num>>.generate(
     rows, 
     (i) => new List<num>.fixedLength(cols, fill: 0) 
    ).toList(); 

main() { 
    print(makeMatrix(3, 5)); 
} 

打印:[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

有點煩人的是,要得到fill:參數,你必須構造一個固定長度的列表。沒有填充值,內部列表將包含null s。獲得具有初始值的可擴展列表的一種方法是創建一個空列表並進行擴展。

(i) => <num>[]..insertRange(0, cols, 0) 

這是使用的方法級聯修改返回之前的列表 - 返回aa..b()..c()調用a.b()a.c()。這很方便,因爲它避免了臨時變量的需要。 請注意,由於某種原因,insertRange具有位置而不是名爲fill的參數。

如果要對內容進行更多控制,您可以擴展生成到列表主意兩個層次:

makeMatrix(rows, cols, function) => 
    new Iterable<List<num>>.generate(
     rows, 
     (i) => new Iterable<num>.generate(cols, (j) => function(i, j)).toList() 
    ).toList(); 

main() { 
    print(makeMatrix(3,5, (i, j) => i == j ? 1 : 0)); 
} 

打印:[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0]]

+0

這是一個非常有趣的方法...有空值生成列表中的任何問題,然後填寫其他值? – 2013-02-23 06:54:20

+0

非常漂亮的一個班輪。 – 2013-02-25 19:42:25