2013-08-03 115 views
1

我有數據是這樣的:2維陣列狀在其他語言

44 {5,8,0,0,2,5,9} 
99 {9,9,9,9,5,5,1} 
12 {0,0,9,5,1,7,1} 

第一個數字是喜歡在括號中的主鍵和其他數字是其值。

我想上面保存數據到數組是這樣的:

int id = 0; 
int ids[]; 
int data[][7]; 

ids[id] = 44; 
data[ids[id]][0] = 5; 
data[ids[id]][1] = 8; 
data[ids[id]][2] = 0; 
data[ids[id]][3] = 0; 
data[ids[id]][4] = 2; 
data[ids[id]][5] = 5; 
data[ids[id]][6] = 9; 
id++; 
ids[id] = 99; 
data[ids[id]][0] = 9; 
data[ids[id]][1] = 9; 
data[ids[id]][2] = 9; 
data[ids[id]][3] = 9; 
data[ids[id]][4] = 5; 
data[ids[id]][5] = 5; 
data[ids[id]][6] = 1; 
id++; 
ids[id] = 12; 
data[ids[id]][0] = 0; 
data[ids[id]][1] = 0; 
data[ids[id]][2] = 9; 
data[ids[id]][3] = 5; 
data[ids[id]][4] = 1; 
data[ids[id]][5] = 7; 
data[ids[id]][6] = 1; 
id++; 

然後存取權限他們是這樣的:

Console.Write(""+data[44][0]); 
output: 5 

我希望你明白我的意思。這是使用數組的一個非常基本的例子,我無法找到如何在C#中使用。我怎麼能這樣做?我已經閱讀了msdn上的Arrays Tutorial,但是我甚至沒有發現如何創建一維動態數組(從0到無限)和第二個靜態(從0到6)的數組。有沒有簡單的解決方案如何做到這一點?謝謝。

+5

如果鍵是唯一的,則使用「字典」數字就像一個主鍵「_) –

+2

爲什麼不使用'Dictionary >'? – I4V

+0

如果我使用它,輸出會如何?我的意思是:Console.Write(「」+ data [44] [0]); – LukAss741

回答

2
Dictionary<int, int[]> data = new Dictionary<int, int[]>(); 


data.Add(44, new int[]{5,8,0,0,2,5,9}); 
data.Add(99, new int[]{9,9,9,9,5,5,1}); 
data.Add(12, new int[]{0,0,9,5,1,7,1}); 

通過使用字典,您可以以較低的複雜性獲得所需的效果。它將使您能夠創建每個陣列

+0

好的,謝謝我有如何使用它。 – LukAss741

2

唯一的密鑰在.NET中使用一個Dictionary<TKey, TValue>如果關鍵是獨特的什麼「第一個數字是像一個主鍵」建議。您可以使用int[]List<int>(如果它應該是可變的)值。

var dict = new Dictionary<int, int[]>(); 
var values = new[] { 5, 8, 0, 0, 2, 5, 9 }; 
dict.Add(44, values); 
values = new[] { 9, 9, 9, 9, 5, 5, 1 }; 
dict.Add(99, values); 
// ... 

你可以通過鍵來訪問它在一個非常有效的方式:

Console.Write(dict[44][0]); // 5 
1

你可以使用一個Dictionary<int, List<int>>

var data = new Dictionary<int, List<int>>(); 
data.Add(44, new List<int> { 5, 8, 0, 0, 2, 5, 9 }); 
data.Add(99, new List<int> { 9, 9, 9, 9, 5, 5, 1 }); 
//.... 

,並利用:

var id = 44; 
var value1 = data[id][0]; 
// ... 
0

如果你可以保持你的鑰匙是唯一的,t hen字典是其他答案中提到的最好的選擇,如果你想每個值有多個鍵,那麼Lookup是最好的選擇,See this