如何使用C#在.Net中設置特定對象類型列表的初始大小,並且能夠在指定索引處插入完全分配的對象?設置列表初始大小
設置列表初始大小
回答
這可以用一個數組來輕鬆完成:
string[] sa = new string[99];
sa[71] = "g";
這也恰好實現IList接口。
您不能將項目插入到數組中。您只能替換一個值。 – Servy 2013-04-08 13:50:20
@Servy正如已經多次指出的那樣,短語「在特定位置插入」顯然是不明確的,並且意味着「覆蓋」或「插入到插槽中」與其意味着「插入和推出」的鏈接列表。當你談論在特定位置插入時,你通常打算讓其他位置的物體保持放置而不是改變位置。 – RBarryYoung 2013-04-08 14:27:24
如果你不打算任何其他對象改變位置,那麼適當的術語將是「替換」或「覆蓋」。不是「插入」。如果這是預期的意思,那麼這不是該術語的適當使用。 – Servy 2013-04-08 14:33:02
您可以使用構造函數重載List<T>(int capacity)
:
var l = new List<string>(42);
容量爲42
我已經低估了。看到我的答案,你就會知道爲什麼。 – MarcinJuraszek 2013-04-05 21:05:46
好的,我把這個問題看作是「填寫清單時,我希望能夠插入項目」而不是「我希望能夠從頭開始插入項目」(例如:add item 0,item 1,insert項目介於0和1之間),它與'List
下聲稱插入失敗選民創建一個列表。
您是否閱讀過鏈接中的文檔?
ArgumentOutOfRangeException如果index小於0 - 或 - index大於Count。
所以容量和數量是不一樣的 - 不會讓答案錯誤。
如果index小於0,則MarcinJuraszek的答案將拋出ArgumentOutOfRangeException - 或者 - index大於Count。
我在生產應用程序中正好使用這種方式來按字母順序加載,然後在索引0處插入任何用戶添加,並且它有從不引發異常。
有List<T>
構造函數需要一個int
爲initiall列表容量的參數,但它實際上並沒有創建一個數的列表中的元素,所以這將拋出ArgumentOutOfRangeException
:
var items = new List<int>(10);
items[4] = 3;
您可以創建你自己創造的那種List
方法,初始大小:
private static List<T> CreateList<T>(int capacity)
{
return Enumerable.Repeat(default(T), capacity).ToList();
}
這將使其工作:
var items = CreateList<int>(10);
items[4] = 3;
但是,當您知道所需容量時,爲什麼不使用Array
而不是List
?
無LINQ版
private static List<T> CreateList<T>(int capacity)
{
List<T> coll = new List<T>(capacity);
for(int i = 0; i < capacity; i++)
coll.Add(default(T));
return coll;
}
@MarcinJuraszek謝謝你的回答,但是到目前爲止,這並不適用於我。這是我的。 '子場= CreateList
據我所知的初始大小設置爲列表違背相比,數組列表背後的整個想法。
但這裏是你怎麼做:
List<ItemType> list = new List<ItemType>(size);
尺寸爲int數據類型。
的一個實例這將設置初始容量,而不是初始大小 – winwaed 2014-09-12 17:36:56
- 1. 如何設置TreeViewer的初始大小?
- 2. 初始化散列表的大小
- 3. 未初始化列表的大小C#
- 4. 基於內容大小設置多行textInput的初始大小
- 5. 設置下拉列表來初始值
- 6. Vaadin表:如何設置最大初始列寬度
- 7. 初始化大小
- 8. 從另一個列表大小或int設置列表大小?
- 9. 添加值以列出初始化列表大小
- 10. 初始窗口大小/調整大小
- 11. 如何在Python中設置字典的初始大小?
- 12. Selenium WebDriver使用PhantomJSOptions設置PhantomJS初始視口大小
- 13. 如何設置PhosphorJS Widget的(初始)大小
- 14. 如何在iOS中設置初始大小UIMapkit
- 15. Tomcat 7:如何正確設置初始堆大小?
- 16. 如何在QSplitter中設置QTreeView的初始大小?
- 17. 如何在Java中設置初始窗口大小OpenGL
- 18. 如何爲reference_wrapper的STL容器設置初始大小?
- 19. 設置GLKView的初始大小與故事板
- 20. Sharepoint Collaboration Portal初始大小
- 21. 初始Tomcat 5.5堆大小
- 22. ByteBuf初始容量大小
- 23. 初始化STL`map`大小
- 24. UIscrollview初始圖像大小
- 25. 初始大小的BasicDataSource
- 26. 初始chromecast設置
- 27. jScrollPane初始設置?
- 28. 設置初始ScrollView
- 29. 如何在使用分頁時設置表格的初始大小?
- 30. 設置SQLAlchemy PickleType列大小
是不是指'列表'?你肯定需要插入,或只覆蓋? –
2013-04-05 20:57:36
使用'List'你不能只使用'Insert(index,item)'? –
mattytommo
2013-04-05 20:59:09
@mattytommo當然可以。它會拋出一個索引超出範圍的異常,你可以編譯它的錯誤。 – Servy 2013-04-05 21:04:28