1

次のようなデータがあります。

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 から無限) で 2 番目が静的 (0 から 6) の配列を作成する方法さえ見つけられませんでした。それを行う簡単な解決策はありますか?ありがとう。

4

4 に答える 4

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

ディクショナリを使用すると、複雑さを軽減して目的の効果を得ることができます。配列ごとに一意のキーを作成できるようになります

于 2013-08-03T20:41:53.390 に答える
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
于 2013-08-03T20:43:08.643 に答える
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];
// ...
于 2013-08-03T20:43:18.890 に答える
0

キーを一意に保つことができる場合、他の回答で述べたように、ディクショナリがこれに最適なオプションです。値ごとに複数のキーが必要な場合は、ルックアップが最適なオプションです。これを参照してください

于 2013-08-03T20:47:31.240 に答える