在C#中,哪些集合類型可以用於索引不連續(但只按升序添加)的數組,並且我需要按索引和按位置訪問(例如「連續索引」)?例如,如果我添加索引2,4和7的對象A,B和C,我需要通過索引(2/4/7)或地點(1/2/3或0/1/2都有效)。非連續編號的數組.NET
回答
您應該使用Dictionary
存儲對象通過其索引訪問,但你也需要某種List
到「地方」存儲爲Dictionary
沒有按」 t存儲地點。將這些一起加入到你自己的課堂中,並將其作爲一項操作進行處理,以確保它們同步。
如果您只想使用一個,您可以使用List
並循環查找密鑰,但它會花費線性O(N)時間。
編輯
馬修Strawbridge指出,BinarySearch
方法會發現在O(日誌N)的元素,所以你可以跳過使用字典。
即使只使用一個'List'對,因爲它已經排序了,你可以使用['List
謝謝,添加到答案。 – Joe 2013-02-17 21:17:16
使用Dictionary
:
using System.Collections.Generic;
Dictionary<int, type> dict = new Dictionary<int, type>();
// Add values:
dict.Add(2, A);
dict.Add(4, B);
dict.Add(7, C);
// by index:
var A = dict[2];
var B = dict[4];
var C = dict[7];
// by place:
var A = dict.ElementAt(0);
var B = dict.ElementAt(1);
var C = dict.ElementAt(2);
我不確定插入的順序是保證與***字典
插入順序當然不能保證。 ElementAt是一種適用於任何IEnumerable的破解。紅旗本身。 – usr 2013-02-17 20:30:51
它仍然是最可行的選項,不包括IEnumerable子類。 – 2013-02-17 20:32:01
- 1. 連續的分組編號在數組
- 2. 非連續序列號
- 3. 如何編碼爲JSON編碼數組從非連續陣列
- 4. URL的連續編號
- 5. data.frame段的連續編號
- 6. SQL - SQLite的計數連續編號
- 7. 非連續計數
- 8. 對數據集分組連續編號中的JasperReports(iReport的)
- 9. 共享非連續訪問Numpy數組
- 10. 連續自動編號
- 11. 怎麼算連續編號
- 12. 打印連續編號
- 13. 連續參考編號
- 14. PostgreSQL unnest()使用連續整數編號
- 15. 用連續編號填充非空單元格列VBA
- 16. 連續計數非空值
- 17. 非連續盤中指數
- 18. 更新連續編號的SQL
- 19. 訪問編號爲連續的
- 20. 檢查連續編號的屬性
- 21. 結合連續編號爲範圍的元組
- 22. 查找數組中的非連續數字對
- 23. 使用非連續數字的F#數組初始化
- 24. 數組中連續的偶數和連續的奇數
- 25. 連續1的計數組
- 26. 非連續UISlider iOS
- 27. 非連續滑塊
- 28. 非連續範圍
- 29. 有沒有什麼好方法可以將非連續數組作爲連續的1D數組?
- 30. Laravel:曲目編號OS連續登錄
A,B和C或2,4和7是唯一的嗎? – 2013-02-17 20:21:14
將關鍵字查找字典和訂單列表綁定在一起可能是您最好的選擇。我認爲你可以用k-d樹來做這件事,儘管我對它們的瞭解不多,而且我認爲這樣做有點矯枉過正。可能如果你想貶低和骯髒,可以通過重新實現Dictionary類的一些部分來提高效率,但我認爲這是一個壞主意。 – DarkOtter 2013-02-17 20:44:33
@TimSchmelter在我目前的情況下,他們是獨一無二的 – baruch 2013-02-17 20:55:09