2014-07-15 39 views
0

想知道哪些是在C#中訪問二維數據的最佳方式(.Net Framework 3.5) 我正在嘗試做一個簡單的遮罩應用程序來屏蔽一組數字(0- 9)到一系列字母。需要被屏蔽的數字是columnName,並且codition是rowName。訪問二維數據的最佳方式

我已經使用了鋸齒狀陣列和2D陣列。有沒有其他的方法可以在代碼編寫和運行控制檯應用程序方面有效。使用rowName(串)和列名(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將不勝感激。

謝謝

+0

「第三」行和第5列不會以** de **結尾。他們是基於0還是基於1? –

+1

這只是一個編碼練習嗎?這段代碼的目的是什麼?有了你提供的信息,我會說2D陣列就足夠了。對於更復雜的情況,您應該考慮將「屏蔽數據」存儲在數據庫中。在我們發佈代碼之前,你應該發佈代碼;)。 – user1567896

+0

@Dennis_E,對不起,我已經做了修改。他們是基於1的 –

回答

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輸入你要讀的行字節[] 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,從A到E,從61碼39和信件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); 
} 

對於這個例子,你的管道只需要兩個字節數組來存儲處理時的輸入和輸出。

相關問題