我有一个列表,我需要一个子集,其中有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会有更好,更有效的方法,有什么指导吗?
最佳答案
我将使用Skip和Take,以便您将所有元素都包含在当前索引(和当前索引)中。
要删除当前索引,可以添加一个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();