You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LINQ实现:获取列表中每个元素对应的其余所有元素?

LINQ实现排除自身元素的列表生成

针对你的需求,这里提供两种简洁的LINQ解决方案,替代嵌套循环的实现:

方法1:通过Take+Skip拼接前后元素

利用Take获取当前索引之前的所有元素,Skip获取当前索引之后的所有元素,再通过Concat合并两部分:

List<int> myList = new List<int> {5, 3, 7, 5, 7, 10};
var result = myList.Select((_, index) => 
    myList.Take(index).Concat(myList.Skip(index + 1)).ToList())
    .ToList();
  • 这里用下划线_忽略当前元素(因为我们只需要它的索引)
  • Take(index)取列表前index个元素,Skip(index+1)跳过前index+1个元素(即跳过当前元素),剩下的就是后面的所有元素
  • 最终每个子列表都是原列表排除当前索引元素后的结果

方法2:通过带索引的Where筛选

直接用Where结合索引条件,过滤掉当前位置的元素:

var result = myList.Select((_, index) => 
    myList.Where((_, idx) => idx != index).ToList())
    .ToList();
  • Where的第二个参数是元素的索引,判断索引不等于当前处理的index即可排除自身

关于TakeWhile/SkipWhile失效的原因

你之前尝试的TakeWhile和SkipWhile是按元素值的条件判断,而不是按索引位置。比如原列表有重复的5,当处理第一个5时,TakeWhile(x => x != 5)会直接返回空列表,而不是取到索引0之前的元素,这就不符合需求。所以针对按位置排除的场景,用基于索引的Take/Skip或带索引的Where更准确。

内容的提问来源于stack exchange,提问作者user1953684

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:57:21