我想在列表中的两个变量索引之间返回元素。
例如,给定此列表 -
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的索引值。 我该如何做到这一点?
答案 0 :(得分:6)
您可以使用Enumerable.Skip和Enumerable.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();