2017-05-09 21 views
-1

我的問題是,我不知道如何將數據添加到列表並保留我的座標(我必須使用列表而不是數組)。C#:將數據添加到列表,其中必須包含座標

下面是代碼,我要補充的數據通過保持座標(i,j)可列出:

for(int i = 0; i < x; i++) //x = amount of vertical lines 
{ 
    for(int j = 0; j < y; j++) //y = length of one line 
    { 
     //labyrinth[i][j] is the string type list 
     //intLabyrinth is int type list 
     if (labyrinth[i][j] == '.') intLabyrinth.Add(0); 
     if (labyrinth[i][j] == '#') intLabyrinth.Add(-1); 
     if (labyrinth[i][j] == '@') intLabyrinth.Add(1); 
     if (labyrinth[i][j] == '%') intLabyrinth.Add(-2); 
    } 
} 

那麼,怎樣才能解決呢?

感謝您的幫助!

+0

您需要添加什麼清單?那是數據的座標嗎? [MCVE] –

+0

「保持我的座標」是什麼意思?保持如何?哪裏?爲什麼? – Svish

+0

如果'intLabyrinth'是你正在談論的列表,你已經在做它。 – Stefan

回答

0

如果你想多值存儲在您的列表,在這種情況下,你可以使用一個Tuple

重新定義您的列表如下:

//i, j, value 
List<Tuple<int,int,int>> newLabyrinthList = new List<Tuple<int,int,int>>(); 

而不是增加,在你想要的順序(我用I,J值在這個例子中)

if (labyrinth[i][j] == '.') newLabyrinth.Add(new Tuple<int,int,int>(i,j,0)); 
if (labyrinth[i][j] == '#') newLabyrinth.Add(new Tuple<int,int,int>(i,j,-1)); 
if (labyrinth[i][j] == '@') newLabyrinth.Add(new Tuple<int,int,int>(i,j,1)); 
if (labyrinth[i][j] == '%') newLabyrinth.Add(new Tuple<int,int,int>(i,j,-2)); 

您可以檢索使用的值,例如:

int i = newLabyrinth[0].item1; 
int j = newLabyrinth[0].item2; 
int v = newLabyrinth[0].item3; 

或從一個循環

foreach(var tuple in newLabyrinth) 
{ 
    int i = tuple.item1; 
    int j = tuple.item2; 
    int v = tuple.item3; 
} 

如果這是混淆你可以定義一個類列表存儲:

public class OperationAtCoordinate 
{ 
    public int X {get;set;} 
    public int Y {get;set;} 
    public int Operation{get;set;} 
} 

然後你需要像一個列表:

List<OperationAtCoordinate> newnewLabyrinth = new List<OperationAtCoordinate>(); 

加入電話:

newnewLabyrinth.Add(new OperationAtCoordinate() 
        { 
         X = i, 
         Y = j, 
         Operation = //your value here 
        }); 
相關問題