0

Cシャープ初心者です。安全でないコードを回避しながら、次の問題にアプローチしようとしています。私の説明が過度に思われる場合は申し訳ありません。できるだけ明確にしようとしているだけです。

次の形式のファイルを読み込んでいます。

Column1  Column2 Column3
1          a        q
1          a        w
2          a        b
1          e        v
3          w        q
3          q        x
...        ...      ...

「column1」のすべての一意のアイテムが { column2 、 column3} ペアにリンクされるようなデータ構造を作成しようとしています。このようなもの:

{1} => {a, q}, {a,w} , {e,v}
{2} => {a,b}
{3} => {w,q} , {q,x}

ここでの問題は、"column1" に固有の項目がいくつあるか、事前にわからないことです。これまでのところ、ペアを「.add()」するだけで済むように、あらかじめ listdictionary 変数を作成して対処してきました。C++ でこれを行っていた場合、{column2, column 3} のペアを保持する構造体へのポインターを保持するある種の配列を使用することになります。 C#.

要するに、 listdictionary を動的に作成する方法、または問題にアプローチするためのより良い方法があるかどうかについての提案を求めています。

4

3 に答える 3

1

配列に行の内容があると仮定すると、次のように作業できます。

        Dictionary<string, List<string[]>> allPairs = new Dictionary<string, List<string[]>>();

        foreach (string currentLine in allLines)
        {
            string[] lineContent = currentLine.Split(" "); //or something like it. Maybe it should be a TAB
            string[] newPair = new string[2];
            newPair[0] = lineContent[1];
            newPair[1] = lineContent[2];

            if (allPairs[lineContent[0]] == null)
            {
                allPairs[lineContent[0]] = new List<string[]>();
            }

            allPairs[lineContent[0]].Add(newPair);
        }

よろしく

于 2012-07-26T23:57:56.223 に答える
0

配列が既にメモリに読み込まれている場合は、LINQ ToLookup メソッドを使用できます。

overallArray.ToLookup(x => x.Column1, x => new{x.Column2, x.Column3});
于 2012-07-27T00:14:02.573 に答える
0
foreach (DictionaryEntry de in myListDictionary)
{
    //...
}

私はあなたのためにいくつかの調査を行い、このコード記事を思いつきました。見てみな。

http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx

于 2012-07-27T00:21:23.247 に答える