-1

我有一个字符串列表DadmamJuniorRichard。假设我从列表中删除了索引为2的 Junior。理查德的指数是变成 2 还是仍然是 3 与第二位的差距?

感谢您的帮助

4

6 回答 6

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
于 2012-08-14T16:47:01.740 回答
4

没有间隙。如果你想要一个差距,用你自己替换那个位置的值null

大多数情况下,您不想要间隙,因此您会很高兴它为您保持整洁。

但是,一个实际的结果是,如果您要在同一操作中删除很多项目,您可能会发现仅使用未删除的项目构建一个新列表会更快(因为它会在每个消除)。

不过,这必须花很多钱才值得。如果您遇到了很大的延迟,请记住这一点,而不是直接跳入该方法。

于 2012-08-14T16:52:06.897 回答
2

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

于 2012-08-14T16:46:54.913 回答
2

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

如果您使用Add将内容添加到末尾,则当前项目将保留在原处,而新项目将添加到列表的末尾。当前项目索引不变。

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

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

索引编号永远不会有间隙。索引将始终从 0 开始,并且比列表的长度小一。

于 2012-08-14T16:46:59.033 回答
2

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

如果使用Add 方法,则该项会附加到 List 的末尾,因此所有其他元素的索引都不会改变。

于 2012-08-14T16:47:06.277 回答
2

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

于 2012-08-14T16:47:41.793 回答