返回列表中两个变量索引之间的元素

时间:2015-06-12 11:19:00

标签: c# .net linq list

我想在列表中的两个变量索引之间返回元素。

例如,给定此列表 -

List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

我想使用索引值的变量循环遍历列表。让我们调用索引值X和Y. 因此,如果X等于索引值0并且Y等于值5,我需要遍历索引0-5并返回所有元素值。例如,X和Y稍后可以变为5到8的索引值。 我该如何做到这一点?

5 个答案:

答案 0 :(得分:6)

您可以使用Enumerable.SkipEnumerable.Take

var res = list.Skip(x).Take(y-x+1);

使用变量作为索引

stl(ts(as.numeric(xts_object), frequency=52), s.window="periodic", robust=TRUE) 

注意您需要将起始元素索引传递给Skip并获取所需的元素数量,以便在Take参数减去起始元素编号时传递所需元素的数量,另外一个列表为零基于指数。

答案 1 :(得分:5)

您可以使用List.GetRange

var result = list.GetRange(X, Y-X+1);

或简单的for循环

List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = X; i <= Y; i++)
{
    Console.WriteLine(list[i]);
}

或以您想要的方式重新发明轮子

public static class Extensions
{
    public static IEnumerable<T> GetRange<T>(this IList<T> list, int startIndex, int endIndex)
    {
        for (int i = startIndex; i <= endIndex; i++)
        {
            yield return list[i];
        }
    }
}

foreach(var item in list.GetRange(0, 5))
{
     Console.WriteLine(item);
}

答案 2 :(得分:2)

int x = 0, y = 5;
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (; x < y; x++)
{
    Console.WriteLine(list[x]);
}

如果X总是小于Y,这将起作用。 如果您不知道哪个更大,请在循环之前添加:

 if (x > y) 
 {
      x = x ^ y;
      y = y ^ x;
      x = x ^ y;
  }

答案 3 :(得分:1)

另一种选择:

int X = 0, Y = 5;
Enumerable.Range(X, Y - X + 1)
.Select(index => list[index]);

答案 4 :(得分:1)

应该做的伎俩 -

        List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        int startindex = 1;
        int endIndex = 7;
        var subList = list.Skip(startindex).Take(endIndex - startindex-1).ToList();