2012-07-26 60 views
0

我是C-sharp的新手。试图在避免不安全代码的同时解决以下问题。 对不起,如果我的描述看起来过度;只是想尽可能清楚。C#动态列表字典

我读的是具有以下格式的文件:

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

我试图创建一个数据结构,使得在“列1”每个唯一项目链接到{列2,栏3}对。这样的事情:

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

这里的问题是,你不知道“column1”将有多少不同的唯一项目。到目前为止,我已经提前创建了listdictionary变量,以便我可以“添加()”这些对。 如果我在C++中这样做,我会有一些数组持有指向{column2,column 3}对的结构的指针。我承认这可能不是最好的解决方案,但它是我遵循的思路在C#中。

总之,我所要求的建议,关于如何动态地创建一个listdictionary,或是否有更好的方法来解决这个问题。

+0

你好。如果任何答案都可以满足您的需求,请不要忘记将其标记为*正确*。 Regards – 2012-07-27 01:45:28

回答

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

问候

+0

谢谢!像你一样声明词典似乎做我想要的。 – user1556247 2012-07-27 02:33:15

+0

@ user1556247欢迎您=) – 2012-07-27 03:03:38

0

如果您在数组加载到内存中已经,您可以使用LINQ ToLookup方法:

overallArray.ToLookup(x => x.Column1, x => new{x.Column2, x.Column3}); 
+0

只是看着这个解决方案,它适用于我。谢谢 – user1556247 2012-07-27 17:46:18

+0

@ user1556247太棒了,很高兴我能帮上忙。你可以提出答案吗? – Tevin 2012-07-29 11:59:19