2010-08-07 12 views
1

Je crée un programme qui analyse un fichier journal pour le nom d'un utilisateur et son GUID (Global unique identifier) ​​en utilisant des expressions régulières. Jusqu'à présent, mon programme extrait correctement les données et les stocke dans un DataTable à deux colonnes. Sortie son contenu avec ce code:Comment regrouper des doublons d'une collection?

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

sortie Exemple:

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

fonctionne très bien, mais je voudrais de dire

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

en utilisant quelque chose comme un tableau multidimensionnel:

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

Des idées sur la façon d'aborder ce problème? Devrais-je simplement utiliser des tableaux, ou y a-t-il quelque chose de plus dynamique?

Répondre

4

au lieu de traiter dans un processus datatable dans une liste dactylographiée d'objets utilisent alors la déclaration du groupe de 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

Pourriez-vous expliquer ce que fait la partie select? String.Join (g, "et") renvoie une erreur –

+0

@Daniel S: il semblerait que les arguments dans String.Join soient dans le mauvais sens si je me souviens bien - l'argument "et" devrait aller en premier. L'autre chose est que si vous n'utilisez pas .NET 4.0, vous devrez appeler ToArray() sur g pour convertir les noms en tableau. Et au fait, +1 @Tahbaza. –

+0

Désolé tout - mes paramètres String.Join étaient en effet en arrière (faire de ma mémoire défaillante évidemment) - corrigé maintenant avec un edit – Tahbaza

0

La réponse LINQ devrait fonctionner correctement, mais je suis un peu plus ancienne, et je pense que j'irais avec un dictionnaire < Guid, Liste < chaîne > >. Une fois peuplé, vous pouvez facilement parcourir votre dictionnaire.

Questions connexes