[英]What collection should I use in this case?
我正在寫一個類來存儲某種表結構。
現在,此表結構中的每一列都有一個名稱和一個索引。
現在將遍歷該列中的每一行,並且將使用該列的名稱而不是其索引來請求90%的案例數據。
因此,什么是存儲列的好數據結構,以便它可以根據名稱快速檢索索引。 現在,我正在使用一個簡單的string [],但是我想知道是否有更快的方法來做到這一點。
部分代碼:
private string[] _columns;
private int _width;
private int getIndex(string columnName)
{
for (int i = 0; i < _width; i++)
{
if (_columns[i] == columnName) return i;
}
return -1;
}
設置后,列的名稱將保持不變,並且它們的長度通常約為10-16個字符。
提前致謝。
由於您通常將按名稱訪問列,因此,這聽起來像是一個使用Map(C#中的Dictionary類)將字符串映射到列(字符串數組)的好地方。 這將允許O(1)訪問名稱,而不是上面代碼中的當前O(n)。
缺點是您將無法再通過列索引直接訪問。 但是,這很容易解決-只需保留您的列名列表並使用它們進行索引即可! 然后你可以打電話
_columnsMap[_columns[index]]
如果您需要按數字索引,現在仍然是O(1)時間。
使用Dictionary<string,int>
對照其ID存儲列的名稱。
使用您的示例(錯過了_columns
的填充方式):
private IDictionary<string,int> _columns;
private int _width;
private int getIndex(string columnName)
{
return _columns[columnName];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.