2010-08-07 75 views
1

我正在创建一个程序,用于使用正则表达式解析用户名和其GUID(全局唯一标识符)的日志文件。到目前为止,我的程序正确提取数据,并将其存储在双列DataTable中。输出其内容与此代码:我怎样才能从一个集合中分组重复?

foreach (DataRow dr in guids.Select("","guid")) 
    { 
     Console.WriteLine("GUID {0} has the name '{1}'\n", dr["guid"], dr["name"]); 
    } 

输出示例:

GUID c6c4486 has the name 'Daniel' 
GUID c6c4486 has the name 'Mark' 
GUID adh2j34 has the name 'Sophie' 

工作正常,但我想它使用类似多维数组说

GUID c6c4486 has the names 'Daniel' and 'Mark' 
GUID adh2j34 has the name 'Sophie' 

players['guidhere'][0] = Daniel; 
players['guidhere'][1] = Mark; 

关于如何解决这个问题的任何想法?我应该只使用数组,还是有更多的动态?

回答

4

而是加工成一个DataTable过程为对象,然后使用LINQ的组声明的类型列表:

var grps = from r in resultList 
     group r by r.Guid into g 
     select new { guid = g.Key, Names = String.Join(" and ", g) }; 
foreach(var g in grps) 
    Console.WriteLine("GUID {0} has the names {1}", g.guid, g.Names); 
+0

你能解释一下选择部件的作用吗? String.Join(g,“and”)返回一个错误 – 2010-08-07 04:03:36

+0

@Daniel S:如果我没有记错的话,它看起来像String.Join中的参数是错误的 - 参数“and”应该先去。另一件事是,如果您不使用.NET 4.0,则需要在g上调用ToArray()将名称转换为数组。顺便说一句,+1 @塔巴扎。 – 2010-08-07 12:28:32

+0

对不起所有 - 我的String.Join参数确实是倒退(显然是从我的失败内存做) - 现在修改了一个编辑 – Tahbaza 2010-08-07 13:07:29

0

的LINQ答案应该可以正常工作,但我多了几分老气,和我认为我会用字典< Guid,列表<字符串> >。一旦填充完毕,您可以轻松地遍历字典。