1

オブジェクトのコレクションから int 配列を取得する簡単なヘルパー メソッドを作成するにはどうすればよいですか?

アイデアは、「ユーザー」クラスのコレクションを受け取るメソッドを持つことです:

public class User { 
    public int UserId {get;set;}
    public string UserName {get;set;}
}

このコレクションをフィルタリングして、一意の UserId の int 配列を取得します。

List<int> repeatedUserIds = (from item in list 
                             select item.UserId).ToList();
List<int> uniqueUserIds = ((from n in repeatedUserIds 
                             select n).Distinct()).ToList();

この目的のために巧妙な方法を作成する方法はありますか?

4

3 に答える 3

3

拡張メソッドを作成できます。

public int[] GetUniqueIds<T>(this IEnumerable<T> items, Func<T, int> idSelector)
{
    return items.Select(idSelector).Distinct().ToArray();
}

そして、次のように使用します。

int[] uniqueUserIds = list.GetUniqueIds(u => u.UserId);
于 2010-08-09T14:39:03.717 に答える
2

個人的には、クエリ式を気にする必要はありませんが、残りは問題ありません。

List<int> repeatedUserIds = list.Select(item => item.UserId)
                                .ToList();
List<int> uniqueUserIds = repeatedUserIds.Distinct()
                                         .ToList();

repeatedUserIds他に何も必要ない場合は、 ToList():への中間呼び出しを気にしないでください。

List<int> uniqueUserIds = list.Select(item => item.UserId)
                              .Distinct()
                              .ToList();

(私は通常、各操作を別々の行に配置するのが好きですが、もちろんそうする必要はありません。)

あなたのテキストは配列を要求しますが、あなたのコードList<int>int[]の代わりに本当に必要な場合は、呼び出しをにList<int>変更してください。ToList()ToArray()

于 2010-08-09T14:34:20.707 に答える
0
 List<int> uniqueUserIds = (from n in list  
                            select item.UserId).Distinct().ToList(); 
于 2010-08-09T14:34:02.523 に答える