我有这样的数据:
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)的数组。有什么简单的解决方案怎么做?感谢。
答案 0 :(得分: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});
通过使用字典,您可以以更低的复杂性获得所需的效果。它将使您能够为每个数组创建一个唯一键
答案 1 :(得分: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
答案 2 :(得分: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];
// ...
答案 3 :(得分:0)
如果您可以将密钥保持为唯一,那么如其他答案所述,Dictionary是最佳选择,如果您希望每个值有多个密钥,那么Lookup是最佳选择,See this