在迭代它时从集合中删除项目

时间:2017-03-22 06:40:56

标签: c# .net loops for-loop

虽然这个问题可能看似陈词滥调,但直到现在,在我可以做的所有谷歌搜索之后,我都找不到合适的解释。 这是关于在迭代它时从列表中删除项目。它在向前循环迭代时起作用,而向后循环正常工作。以下是一些示例代码:

static void Main(string[] args)
{
    var numberOfIterations = 0;
    var listString = GetData();
    var length = listString.Count;
    for (var i = 0; i < listString.Count; i++)
    {
        numberOfIterations++;
        if (ShouldRemove(listString[i]))
        {
            listString.Remove(listString[i]);
        }
    }
    Console.WriteLine("Number of iterations run {0}", numberOfIterations);
    numberOfIterations = 0;
    listString = GetData();
    for (var i = listString.Count - 1; i >= 0; i--)
    {
        numberOfIterations++;
        if (ShouldRemove(listString[i]))
        {
            listString.Remove(listString[i]);
        }
    }
    Console.WriteLine("Number of iterations run {0}", numberOfIterations);
    Console.ReadLine();
}

private static bool ShouldRemove(string value)
{
    return (value.StartsWith("A"));
}

private static List<string> GetData()
{
    List<string> retList = new List<string>();
    retList.Add("Apple");
    retList.Add("Banana");
    retList.Add("Aeroplane");
    retList.Add("Cosmos");
    retList.Add("Doggy");
    retList.Add("Adam");
    retList.Add("Crocodile");
    return retList;
}

输出结果为:

Number of iterations run 4
Number of iterations run 7

我想知道为什么会这样。当我通过代码调试时,我发现for构造中的第二个条件(i&lt; listString.Count,在第一种情况下,i> = 0,在第二种情况下)在每次循环后重新评估。但这可能是C#语言特有的。这是第二种情况下循环运行每个元素的唯一原因,而在第一种情况下运行仅4次吗? 从面试答案的角度来看,我需要一个答案。谢谢你的阅读!

0 个答案:

没有答案
相关问题