我有一個空列表定義爲包含120個值,我想在索引(45)處插入一個元素,即使列表當前爲空。這可能嗎?如何在自定義索引中的列表中插入對象
public List<Ticket> Tickets = new List<Ticket>(120);
Tickets.Insert(45,ticket); // Here I am getting the ArgumentOutOfRangeException
我有一個空列表定義爲包含120個值,我想在索引(45)處插入一個元素,即使列表當前爲空。這可能嗎?如何在自定義索引中的列表中插入對象
public List<Ticket> Tickets = new List<Ticket>(120);
Tickets.Insert(45,ticket); // Here I am getting the ArgumentOutOfRangeException
您將列表的初始內部容量設置爲120.列表仍爲空。
List<T>
可以容納任意數量的物品。在內部,它使用數組來存儲它們。如果數組滿了,列表將分配一個新的更大的列表。如果您事先知道項目的數量,則可以在構建列表時設置內部數組的大小。這樣可以避免不必要的內存分配。
你可以使用一個數組:
Ticket[] tickets = new Ticket[120];
tickets[45] = ticket
或Dictionary<int, Ticket>
Dictionary<int, Ticket> tickets = new Dictionary<int, Ticket>();
tickets.Add(45, ticket);
,或者創建一個List<Ticket>
持有120個空:
List<Ticket> tickets = Enumerable.Repeat(default(Ticket), 120).ToList();
你應該填充一些列表,因爲這個構造函數列表的犯規來填充它。
public List<Ticket> Tickets = new List<Ticket>(Enumerable.Repeat (new Ticket(), 120));
Tickets[45] = ticket;
我有一種感覺,作爲這個用例的數據結構,數組可能更明智。 – SBI
您可以使用字典也
var dic = new Dictionary<int,Ticket>();
dic[45] = ticket;
Dictionary<int, Ticket> Tickets = new Dictionary<int,Ticket>;
Tickets.Add(45, tickets);
它是否需要成爲一個列表,並確定順序?如果不是爲什麼不使用字典或其他鍵/值對象?
您還可以通過創建數組,其默認初始化所有的元素列表:
List<Ticket> tickets = new Ticket[120].ToList();
tickets[45] = ticket;
接受一個int
是有定義的初始容量,而不是元素的初始數量的構造。
當您嘗試將元素添加以下代碼運行列表:
private void EnsureCapacity(int min)
{
if (this._items.Length >= min)
return;
int num = this._items.Length == 0 ? 4 : this._items.Length * 2;
if ((uint) num > 2146435071U)
num = 2146435071;
if (num < min)
num = min;
this.Capacity = num;
}
關鍵的一點是,它試圖容量每次運行的空間時間加倍。這個結果是每個加倍的數組副本。當您知道列表的大小時,爲了避免計算成本的增加,從設置初始容量開始。
你試圖解決什麼樣的問題?爲什麼你想在一個空列表中的特定「索引」處插入一個項目?爲什麼不用字典?解決原始問題比試圖改變List –
的行爲更容易解決使用「Dictionary」或自定義容器等其他數據結構的更好的解決方案嗎? –