*.Net框架 - IGrouping類 & Lookup類


  Dictionary<TKey, TValue>只為每個鍵支持一個值。新類Lookup<TKey, TElement>是.NET 3.5中新增的,它類似於Dictionary<TKey, TValue>,但把鍵映射到一個值集上。這個類在程序集System.Core中實現,用System.Linq命名空間定義。

 

  Lookup<TKey, TElement>不能像一般的字典那樣創建,而必須調用方法ToLookup(),它返回一個Lookup<TKey, TElement>對象。

  方法ToLookup()是一個擴展方法,可以用於實現了IEnumerable<T>的所有類。

 

  在下面的例子中,填充了一列Racer對象。List<T>實現了IEnumerable<T>,所以可以在賽手列表上調用方法ToLookup()。這個方法需要一個Func<TSource, TKey>類型的委托,Func<TSource, TKey>類型定義了鍵的選擇器。這里使用 表達式r=>r.Country,根據國家來選擇賽手。Foreach循環只使用索引器訪問來自奧地利的賽手,代碼如下:

List < Racer > racers = new List < Racer > ();
racers.Add(new Racer("Jacques", "Villeneuve",
"Canada", 11));
racers.Add(new Racer("Alan", "Jones",
"Australia", 12));
racers.Add(new Racer("Jackie", "Stewart",
"United Kingdom", 27));
racers.Add(new Racer("James", "Hunt",
"United Kingdom", 10));
racers.Add(new Racer("Jack", "Brabham",
"Australia", 14));

Lookup < string, Racer > lookupRacers =
(Lookup < string, Racer > )
racers.ToLookup(r = > r.Country);

foreach (Racer r in lookupRacers["Australia"])
{
    Console.WriteLine(r);
}

結果顯示出來自奧地利的賽手:

Alan Jones
Jack Brabham

 

 

分組數據類型IGrouping接口:

復制代碼
namespace System.Linq
{ 
    public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable
    {
        TKey Key { get; }
    }

  public interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>, IEnumerable
    {
        IEnumerable<TElement> this[TKey key] { get; }
        int Count { get; }
        bool Contains(TKey key);
    }
}
復制代碼 

參考

  [1] book.51cto.com,Lookup類


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM