我正在编写一个类来存储某种表结构。
现在,此表结构中的每一列都有一个名称和一个索引。
现在,此列中的每一行都将循环播放,并且数据将使用列的名称而不是其索引来请求90%的案例。
那么存储列的好数据结构是什么,以便它可以根据名称快速检索索引。现在我正在使用一个简单的字符串[],但我想知道是否有更快的方法来执行此操作。
部分代码:
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个字符。
提前致谢。
答案 0 :(得分:3)
由于您通常会按名称访问列,因此这听起来像是一个使用Map(C#中的Dictionary类)将字符串映射到列(字符串数组)的好地方。这将允许O(1)访问名称而不是上面代码中的当前O(n)。
缺点是您将无法再通过列索引直接访问。但是,这很容易解决 - 只需保留列名列表并使用它们进行索引!然后你可以打电话
_columnsMap[_columns[index]]
如果你需要按编号索引,它仍然是O(1)时间。
答案 1 :(得分:1)
使用Dictionary<string,int>
存储列的名称与其ID。
使用您的示例(错过了_columns
的填充方式):
private IDictionary<string,int> _columns;
private int _width;
private int getIndex(string columnName)
{
return _columns[columnName];
}