添加/删除元素时列表索引发生了什么变化?

时间:2012-08-14 16:45:22

标签: c#

我有一个字符串列表爸爸 mam Junior Richard 。比方说,我从列表中删除索引为 2 的Junior。理查德的指数变为2还是仍为3,第二位有差距?

感谢您的帮助

6 个答案:

答案 0 :(得分:5)

  

让我们说,我从列表中删除索引为2的Junior。理查德的指数变为2还是仍为3,第二位有差距?

变为2.没有差距。当您添加元素时,此元素将附加到列表的末尾。

顺便说一下,老兄,这个问题很难验证吗?我的意思是你无法访问编译器或什么?

using System;
using System.Linq;

public class Program
{
    static void Main()
    {
        var list = new[] { "Dad", "mam", "Junior", "Richard" }.ToList();
        list.RemoveAt(2);
        Console.WriteLine(list[2]);
    }
}

打印:

Richard

答案 1 :(得分:4)

没有差距。如果您想要一个间隙,请用null替换该位置的值。

大多数情况下,你不想要一个缺口,所以你可以为它保持整洁而感到高兴。

然而,一个实际的结果是,如果你要在同一个操作中移除很多项目,你可能会发现只用那些你没有的那些建立一个新列表会更快。 ; t删除(因为它在每次删除后会在内部移动)。

尽管如此,它必须要付出很多代价。如果你遇到很大的延迟,请记住这一点,而不是直接采取这种方法。

答案 2 :(得分:2)

没有差距 - 编辑后的列表只包含三个项目,它们的索引为012

答案 3 :(得分:2)

常规List<T>不是排序列表。

如果使用Add将内容添加到最后,则当前项目保持原样,新项目将添加到列表末尾。当前项目索引不会改变。

如果您使用Insert在列表中间插入一个项目,索引将向上移动超过插入点。

同样,如果您Remove项目,该项目上方的列表元素索引将向下移动。

索引编号永远不会有差距。索引将始终从0开始,最多比列表长度少一个。

答案 4 :(得分:2)

如果您使用Remove method,那么是,Richard的索引变为2.您删除的元素实际上已从List中删除,因此索引将被更新。

如果您使用Add method,该项将附加到List的末尾,因此所有其他元素的索引都保持不变。

答案 5 :(得分:2)

它将成为2. List的索引始终是列表中项目的位置;可以而且永远不会有差距。此外,Count将始终返回列表中的项目数,项目的索引将始终为0到Count-1