我有一个列表,我需要一个子集,其中有5个先前元素到当前for循环中的5个元素中,因此总共有10个元素。忽略循环中的当前项目。

我目前正在实现以下目标:

var currentIndex = myList.ClassName.FindIndex(a => a.Id == plate.Id);
var fromIndex = currentIndex - 5;
if (fromIndex < 0) fromIndex = 0;
var toIndex = currentIndex + 5;
if ((myList.ClassName.ElementAtOrDefault(toIndex) == null))
    toIndex = myList.ClassName.Count - 1;


var subsetList = myList.ClassName.GetRange(fromIndex, (11));
comparisonPlates.RemoveAt(currentIndex);


但是,我敢肯定,使用LINQ会有更好,更有效的方法,有什么指导吗?

最佳答案

我将使用SkipTake,以便您将所有元素都包含在当前索引(和当前索引)中。

要删除当前索引,可以添加一个RemoveAt;或使用多个“跳过/获取”(“跳过/获取”来获取之前的元素,而“跳过/获取”来获取之后的元素)

附带样品:

const int currentIndex = 12;
const int nbElements = 5;
List<string> results = items.Skip(currentIndex - nbElements).Take(nbElements).Concat(items.Skip(currentIndex + 1).Take(nbElements)).ToList();

09-27 13:22