for WPF developers
Home Profile Tips 全記事一覧

ToLookup 拡張メソッドで要素をグループ化する

(2017/03/14 11:22:33 created.)

ToLookup 拡張メソッドは指定されたキーで分類分けします。同様の機能として GroupBy 拡張メソッドがあります。使い方は GroupBy 拡張メソッドと同じであるため、「GroupBy 拡張メソッドで要素をグループ化する」を参照してください。

これらの拡張メソッドの違いを下表にまとめます。

項目 GroupBy 拡張メソッド ToLookup 拡張メソッド
keySelector によるキーの指定
elementSelector による要素の指定
resultSelector による結果値の射影 ×
comparer によるキーの比較方法の指定
戻り値 IEnumerable<T> ILookup<T>

ILookup<T> インターフェースは IEnumerable<T> インターフェースと違って次のようなプロパティなどが用意されています。

ILookup インターフェースの定義
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Reflection;
  5.  
  6. namespace System.Linq
  7. {
  8.     public interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>, IEnumerable
  9.     {
  10.         /// <summary>
  11.         /// グループ数を取得します。
  12.         /// </summary>
  13.         int Count { get; }
  14.  
  15.         /// <summary>
  16.         /// インデックス指定によって要素を取得します。
  17.         /// </summary>
  18.         IEnumerable<TElement> this[TKey key] { get; }
  19.  
  20.         /// <summary>
  21.         /// 指定したキーが存在するかどうかを確認します。
  22.         /// </summary>
  23.         /// <returns>指定したキーが存在する場合に true を返します。</returns>
  24.         bool Contains(TKey key);
  25.     }
  26. }

resultSelector が必要か、戻り値として ILookup<T> が必要かという観点から GroupBy 拡張メソッドと ToLookup 拡張メソッドを使い分けるようにしましょう。