我希望返回列表中两个变量索引之间的元素。
举个例子,考虑到这个清单-
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };我想循环遍历用于索引值的to变量的列表。让我们调用索引值X和Y。因此,如果X等于索引值0,Y等于值5,我需要遍历索引0-5并返回所有元素值。例如,X和Y后来可能成为5到8的指标值。我怎样才能做到这一点?
发布于 2015-06-12 11:23:20
您可以使用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);
}发布于 2015-06-12 11:21:34
您可以使用Enumerable.Skip和Enumerable.Take
var res = list.Skip(noOfElementToSkip).Take(noOfElementsToTake);使用变量作为索引
var res = list.Skip(x).Take(y-x+1);备注您需要将开始元素索引传递给Skip,对于获取元素数,您需要在接受参数中传递所需元素数减去开始元素号,再加上一个列表是基于零的索引。
发布于 2015-06-12 11:24:22
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;
}https://stackoverflow.com/questions/30801770
复制相似问题