使用索引将成员添加到C#列表
如果我声明一个C#List。使其容量达到1000。 现在,如果我想直接在索引1处添加一个元素。我做不到。投掷错误。有其他选择吗使用索引将成员添加到C#列表,c#,.net,list,C#,.net,List,如果我声明一个C#List。使其容量达到1000。 现在,如果我想直接在索引1处添加一个元素。我做不到。投掷错误。有其他选择吗 List<sometype> myList = new List<sometype>() myList.capacity = 1000; myList[1] = element; //exception thrown 可以使用Insert()方法,如下所示: myList.Insert(1, element); //1
List<sometype> myList = new List<sometype>()
myList.capacity = 1000;
myList[1] = element; //exception thrown
可以使用Insert()方法,如下所示:
myList.Insert(1, element); //1 is the index
List myList=new List()
myList.capacity=1000;
myList.Add(空);
myList.Add(空);
myList.插入(1,元素)//未引发异常
我发现最好的替代方法是通过数组
sometype[] myarray = new sometype[1000];
myarray[1] = element;
//after filling whole array
myarray.ToList();
正确,正如您所演示的,大多数人都会使用数组进行此操作
sometype[] myarray = new sometype[1000];
myarray[1] = element;
另一个选项是在设置列表元素之前检查边界
List<sometype> myList = new List<sometype>()
myList.capacity = 1000;
if( ix < myList.Count )
myList[1] = element; //replace element
else
{
while(myList.Count < (ix-1))
myList.Add(default(sometype)); //fill with empty
myList.Add(element);
}
List myList=new List()
myList.capacity=1000;
如果(ix
List.Capacity仅预先分配内存,以便列表可以增长到容量限制,而不会导致额外的内存分配和相关的堆碎片。设置列表。容量为1000不能访问1000个条目。List.Count表示实际列表内容的结束。List.Insert()不能用于插入List.Count之外的项目
创建一个包含1000个项目的数组,然后转换为列表,这只是调用list.Add()1000次以在列表中分配空插槽的快捷方式(将list.Count推到1000)。调用List.Add()1000次会提高内存效率,因为使用数组技术,内存中将有2个列表副本(1个用于数组,1个用于列表)
您不考虑对稀疏数组使用字典的建议,因为它将比稀疏填充的数组使用更多内存。这取决于数据的稀疏程度。如果在索引范围0..1000中只有100项,则密度为10%。你也可以称之为90%的内存浪费
对于低密度稀疏数组,字典几乎肯定比分配一个包含1000个项但仅使用100个插槽的数组的内存效率更高。我不知道Dictionary的实现或内存使用的细节,但如果稀疏数组的密度为50%或更高,使用数组而不是Dictionary可能会赢得内存和速度。编辑csharptest.net的答案
List<sometype> myList = new List<sometype>()
while (index >= myList.Count)
myList.Add(default(sometype)); //fill with empty
myList[1] = element;
List myList=new List()
while(索引>=myList.Count)
添加(默认值(sometype))//填满
myList[1]=元素;
No can do,使用Add()方法。如果这是一个稀疏列表(例如10,20个项目分散在1000个范围内),您可能实际上是在查找一个字典而不是列表。@ssg是的,它是一个稀疏列表。使用字典是个好建议。但是那样的话,我会占用更多的空间。还有更简单的吗?到目前为止,我找到的最好的解决方案是使用数组,然后使用ToList方法从中获取列表。@user1041086:相反,使用字典会占用更少的空间。不过,对于1000个整数(64位机器上为8kb),这可能没什么大不了的。通过考虑所有因素来决定。-1您不能在小于Count的位置插入,他也不会尝试执行插入,这将改变该项目之后所有内容的偏移量。谢谢csharptest.net。我修改了我的答案。
List<sometype> myList = new List<sometype>()
while (index >= myList.Count)
myList.Add(default(sometype)); //fill with empty
myList[1] = element;