2010-03-18 8 views
3

Comment puis-je écrire ce code plus proprement/concis?Obtenir une liste de toutes les valeurs pour une clé donnée dans un ensemble de dictionnaires?

/// <summary> 
    /// Creates a set of valid URIs. 
    /// </summary> 
    /// <param name="levelVariantURIDicts">A collection of dictionaries of the form: 
    ///          dict["filePath"] == theFilePath </param> 
    /// <returns></returns> 
    private ICollection<string> URIsOfDicts(ICollection<IDictionary<string, string>> levelVariantURIDicts) 
    { 
     ICollection<string> result = new HashSet<string>(); 
     foreach (IDictionary<string, string> dict in levelVariantURIDicts) 
     { 
      result.Add(dict["filePath"]); 
     } 
     return result; 
    } 

Répondre

10

Vous pouvez sélectionner dict["filePath"] pour chaque dict dans levelVariantURIDicts avec Select:

return levelVariantURIDicts.Select(dict => dict["filePath"]) 
          .Distinct() 
          .ToList(); 

Baisse .Distinct() si les doublons dans le résultat sont très bien.
Déposez .ToList() si vous n'avez pas vraiment besoin de retourner une ICollection <T> et un IEnumerable <T> est très bien.

+0

C'est glorieux. Merci beaucoup. –

Questions connexes