Splice IEnumerable with Linq

本文关键字:Linq with IEnumerable Splice | 更新日期: 2023-09-27 18:33:06

有没有一种内置的方法可以在Linq-To-Objects中拼接IEnumerable

像这样:

List<string> options = new List<string>(); // Array of 20 strings
List<string> lastOptions = options.Splice(1, 5); // Gets me all strings 1 through 5 into a new list

Splice IEnumerable with Linq

尝试:

List<string> options = new List<string>();
List<string> lastOptions = options.Skip(0).Take(5).ToList();

Skip 用于演示如何跳过 X 元素 (TNX DRCH)


你可以创建这样的东西:(扩展方法)

public static class SpliceExtension
{
    public static List<T> Splice<T>(this List<T> list, int offset, int count)
    {
        return list.Skip(offset).Take(count).ToList();
    }
}

但这仅适用于列表。


您也可以在IEnumerable<>上使用它

public static class SpliceExtension
{
    public static IEnumerable<T> Splice<T>(this IEnumerable<T> list, int offset, int count)
    {
        return list.Skip(offset).Take(count);
    }
}

这样,列表就不会完全迭代。

像这样使用它:

List<string> lastOptions = options.Splice(1, 5).ToList();

我更喜欢这种方式,因为它可以用于多个 linq 查询。

目前还没有提到JavaScript的slicesplice之间的区别。

请注意,splice也会更改 JavaScript 中的原始数组,而slice不会。因此,接受的答案是slice端口。

为了完整起见,这里有一个splice端口:

public static class SpliceExtension
{
    public static List<T> Splice<T>(this List<T> list, int start, int count)
    {
        var listWithDeletedElements = list.GetRange(start, count);
        list.RemoveRange(start, count);
        return listWithDeletedElements;
    }
}