2017-05-09 22 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 
        }); 
相关问题