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

c# – LINQ中的高效列表自我比较?

发布时间:2020-12-15 08:32:55 所属栏目:百科 来源:网络整理
导读:这可能与此 question非常相似,但我想知道C#和LINQ中最有效的方法是在同一列表中比较元素列表. 例如,在伪代码中我想这样做: foreach(i in list) foreach(j in list.Except(i)) Compare(j,i) 我知道Except采用了一个可枚举而不是单个项目,可能不是最好的主意,
这可能与此 question非常相似,但我想知道C#和LINQ中最有效的方法是在同一列表中比较元素列表.

例如,在伪代码中我想这样做:

foreach(i in list)    
    foreach(j in list.Except(i))    
        Compare(j,i)

我知道Except采用了一个可枚举而不是单个项目,可能不是最好的主意,但它应该说明我的意图.

有任何想法吗?

更新:

我想这个问题有点模糊.目标是迭代列表两次(使用LINQ),同时跳过对(i,i);无论比较(i,j)实际上做什么与我的问题无关.

那么有两种情况,一种是(i,j)==(j,i)和(i,j)!=(j,i).对于前者,乔治·达克特(George Duckett)在下面的跳过解决方案可以解决这个问题,但后者呢?这是我最初使用Except的地方,以便评估(i,j)和(j,i).

所以要澄清一下,除了list.Except(Enumerable.Repeat(i,1))之外,是否有更好的方法可以跳过列表中的元素?

解决方法

这将给你所有对,假设对的顺序无关紧要(比较(i,j)==比较(j,i)):
var test = from i in list
           from j in list.SkipWhile(j => j != i)
           where i != j // Remove the self-comparison if you want to
           select Compare(i,j);

(编辑:李大同)

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

    推荐文章
      热点阅读