6

Linq は非常に強力ですが、拡張機能を作成することを急ぐことがあり、後でネイティブ メソッドでそれを行うことができるかどうか疑問に思うことがあります。

では、拡張機能を使用せずに以下を実装することは可能ですか?

/// <summary>
/// Removes duplicates that are immediately clustered together.
/// </summary>
public static IEnumerable<TData> DistinctLocal<TData>(this IEnumerable<TData> enumerable)
{
    bool yielded = false;
    TData last = default(TData);

    foreach (var item in enumerable)
    {
        if (yielded == false || last.Equals(item) == false)
        {
            last = item;
            yielded = true;
            yield return item;
        }
    }
}
4

3 に答える 3

2

使用できますAggregate

source.Aggregate(new List<YourType>(), 
     (items, current) => 
     {
        if (!items.Any() || items.Last() != current)
            items.Add(current);
        return items;
     });

しかし、明らかにそれはあなたのシーケンスを消費するので、怠惰を失うでしょう...

于 2013-10-04T09:39:19.323 に答える