2012-08-14 170 views

回答

3

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

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

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

虽然它必须是值得的。记住,如果你遇到了很大的延迟,而不是直接采取这种做法的第一件事。

+0

很高兴知道null元素可以帮助保持索引的方式。 – Richard77 2012-08-14 17:34:21

+0

如果你想保持差距,你可以考虑使用数组而不是列表。作为一个规则,我鼓励列表在大多数情况下用于数组(比如,你不需要知道它需要多大),但是这听起来比“list-ish”更“阵列化” 。 – 2012-08-14 17:43:44

+0

列表中的对象数量不是预先知道的,因为它取决于来自数据库的行数。它可以是0或很多 – Richard77 2012-08-25 02:50:39

2

没有缝隙 - 编辑的列表中只有三个项目,和他们有012指标。

2

定期List<T>不是一个排序列表。

如果您使用Add将事物添加到末尾,则当前项目保留在原来的位置,并将新项目添加到列表末尾。当前项目索引不变。

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

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

索引编号永远不会有差距。索引总是从0开始,并且比列表长度小1。

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 
2

如果使用Remove method,那么是的,理查德的指数变得2.您删除的元素字面上从列表中删除,因此索引将被更新。

如果使用Add method,则该项目被追加到列表的末尾,因此所有其他元素的索引都保持不变。

2

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

相关问题