【问题标题】:Best way to access 2D data访问 2D 数据的最佳方式
【发布时间】:2014-07-15 09:54:16
【问题描述】:

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

我使用了锯齿状数组和二维数组。有没有其他方法可以在编码和运行控制台应用程序方面有效。使用 rowName (string) 和 columnName (int) 我应该能够选择数据

所以如果我屏蔽的数字是 5 并且条件是“第三”,那么屏蔽的值应该是 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 容器哪个更好。

请指教。并且将不胜感激如何访问数据的sinnpet。

谢谢

【问题讨论】:

  • “第三”行和第 5 列不会在 de 处结束。它们是基于 0 的还是基于 1 的?
  • 这只是一个编码练习吗?这段代码的目的是什么?根据您提供的信息,我会说二维阵列就足够了。对于更复杂的情况,您应该考虑将“屏蔽数据”存储在数据库中。在我们发布代码之前,您应该发布代码;)。
  • @Dennis_E,对不起,我已经做出了修改。它们是基于 1 的
  • @user1567896 正如我所指出的,我已经知道如何在二维数组中进行操作。我想知道是否还有其他更高效的 STD 容器。据我的经理说,二维数组是资源密集型的。我对 Enums 和 ICollections 有点陌生
  • 最困难的部分是将英文单词(如“third”)翻译成数字。我可能会为此使用字典。剩下的很简单。

标签: c# arrays ienumerable


【解决方案1】:

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

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

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

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);
}

对于这个例子,您的管道只需要两个字节数组来存储处理时的输入和输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2021-05-14
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多