我有一个列表,我需要它的一个子集,它具有 for 循环中当前元素的前 5 个元素和后 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;或使用多个 Skip/Take(Skip/Take 获取你之前的元素,Skip/Take 获取之后的元素)
示例:
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();
关于c# - 获取 LINQ 之前的子集 x 元素和 LINQ 之后的 x 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25504494/