c# - 获取 LINQ 之前的子集 x 元素和 LINQ 之后的 x 元素

标签 c# .net linq

我有一个列表,我需要它的一个子集,它具有 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 执行此操作,有任何指导吗?

最佳答案

我会使用 SkipTake所以你的所有元素都围绕着你的当前索引(和当前索引)。

要删除当前索引,可以添加一个 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/

相关文章:

c# - 覆盖 getter 和 setter 的替代方法

c# - 使用 SignalR 流式传输数据

c# - 循环依赖解决方案

c# - Linq SQL 在服务器端或应用程序端不同吗?

c# - 仅使用 LINQ 时使用 IEquatable 比较两个集合

c# - IdentityServer 3 - 使用数据库中的客户端和范围

c# - GUI在获取数据时未响应

vb.net - 如何在 LINQ 子查询中处理 Null?

.net - 在 Rijndael 加密中对许多文件使用静态 IV 值是否可以?

.net - 将 Foq 与 F# 函数类型一起使用