2010-08-07 72 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,列表<字符串> >。一旦填充完畢,您可以輕鬆地遍歷字典。