繁体   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