加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Linq – 当地特色

发布时间:2020-12-15 08:17:01 所属栏目:百科 来源:网络整理
导读:Linq非常强大,但有时我会发现自己急于进行扩展,后来我想知道我是否可以使用本机方法. 那么,是否可以在不使用扩展名的情况下实现以下内容? /// summary/// Removes duplicates that are immediately clustered together./// /summarypublic static IEnumerab
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;
        }
    }
}

解决方法

以下是在LINQ中完成的方法:
int[] source = new[] { 3,6,1,8,4,7,2,2 };
var result = source.Where((x,i) => i == 0 || !x.Equals(source.ElementAt(i - 1)));

但是,只有在基础序列实现处理ElementAt调用的有效索引器时,才应使用此代码,理想情况是在O(1)时间内.这通常是IList< T>的情况.实现,例如数组,但不适用于其他集合,例如LinkedList< T>.

此外,如果您需要定期使用此功能,那么定义扩展方法没有任何问题,这比在整个地方散布此代码(或任何等效代码)更具可维护性.我个人更喜欢使用您自己的扩展方法来避免非索引集合上的性能问题风险.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读