簡體   English   中英

在這種情況下我應該使用什么集合?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM