3

これは明らかかもしれませんが、私はそれを理解するのに苦労しています。

私はアイテムのリストを持っています。

BOB 5
Brian 5
Sam 6
James 7
Emily 8
Sandra 8
Michael 8

これらはList<MyObject>

一意の ID を持つ最初の項目を選択して、ID ごとに 1 つの項目のみになるようにリストをフィルター処理したいと考えています。

私はで終わるはずです

BOB 5
Sam 6
James 7
Emily 8

これを行うためのクリーンな方法を見つけるのに苦労しています。何か案は?

4

5 に答える 5

8

用途GroupByFirst方法の組み合わせ:

var results = source.GroupBy(x => x.Id).Select(g => g.First()).ToList();

または構文ベースのクエリとして:

var results = (from i in source
               group i by i.Id into g
               select g.First()).ToList();
于 2013-08-16T12:08:03.620 に答える
1

適切な方法は実装することだと思いますIEquatable

次に、.Distinct()

使い方のリンクはこちらです。このようにして、最初のアイテムの処理方法をより詳細に制御できます。

http://msdn.microsoft.com/en-us/library/bb348436.aspx

于 2013-08-16T12:09:32.350 に答える
0

(おそらく) GroupBy/First コンボよりも効率的ですが、ID に特別な null 値 (-1) が必要であり、同じ ID を持つすべての項目をリストにグループ化する必要があります。

        int currentID = -1;
        var unique = list.Where(x =>
        {
            if (currentID != -1 && currentID == x.ID)
                return false;

            currentID = x.ID;
            return true;
        });
于 2013-08-16T12:24:49.870 に答える
0

これはかなり速いはずです:

int c = 0;
var results = source.Where(i =>
{
    if (i.Id > c)
    {
        c = i.Id;
        return true;
    }
    else
        return false;
}).ToList();
于 2013-08-16T12:23:16.350 に答える