访问2D数据的最佳方式

时间:2014-07-15 09:54:17

标签: c# arrays ienumerable

想知道哪种是在C#中访问2D数据的最佳方式(.Net Framework 3.5) 我正在尝试做一个简单的屏蔽应用程序,它将一组数字(0-9)屏蔽为一系列字母。需要屏蔽的数字是columnName,而codition是rowName。

我使用了锯齿状数组和2D数组。有没有其他方法可以做到这一点,这在编码和运行控制台应用程序方面是有效的。使用rowName(string)和columnName(int)我应该能够选择数据

因此,如果我屏蔽的数字是5,条件是#34;第三个"比蒙面值应 ce

aa ab ac ad ae af
ba bb bc bd be bf
ca cb cc cd ce cf
da db dc dd de df
ea eb ec ed ee ef

如果屏蔽表发生变化,它是一个非常累人的过程,因为我需要去很多地方来编辑代码。我必须能够访问另一个。

如果我给ba和条件"第二"我应该能够将columnName检索为1。

所以换句话说,第1列中的所有数据的值都是1,不管条件是什么。

ENUMs,List或其他STD容器会更好。

请指教。并且将了解如何访问数据的方法。

由于

1 个答案:

答案 0 :(得分:2)

这里有两个主要问题。一个是编码,第二个是访问数据的方法。

关于数据访问,最好的选择是管道架构。最好的选择是直接从资源中读取字节。

您的编码表只是矩阵,可以以单个数组的形式存储

char[] coding = {'','a','b','c','d','e',...};

int coder = nextCoder(); //3
int value = nextValue(); //5 

char x = coding[coder]; //c
char y = coding[value]; //e

对于这个例子,我假设您的输入只有ANSII,这意味着对于像1234567这样的输入,你必须读取byte [] 31,32,33,34,35,36,37,38的行。

byte[] input  =    {x31,x32,x33,x34,x35,x36,x37,x38};
byte[] coding = {x00,x61,x62,x63,x64,x65,...} //'','a','b','c','d','e'

我们可以注意到,0到9的整数从30到39编码,a到e的字母从61到66编码。

所以对于像这样的值:

byte coder = nextCoder(); //3
byte value = nextValue(); //35 

我们可以使用该算术代替数组

byte x = 60 + coder; //63
byte y = 30 + value; //65

最后编码

byte[] line = new byte[lineLenght]; //We create our buffers. 
byte[] code = new byte(line.length*2);

while(hasMoreLines) {

  readLine(line);

  for(int i=0, j=0; i < line.length; i++) {
   code[j++] = x60 + coder;
   code[j++] = x30 + line[i];
  }
  writeLine(code);
}

对于此示例,您的管道线只需要两个字节数组,用于在处理时存储输入和输出。