在C#中是否存在带有“命名行”的“DataTable”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在C#中是否存在带有“命名行”的“DataTable”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2098字,纯文字阅读大概需要3分钟。
内容图文
![在C#中是否存在带有“命名行”的“DataTable”?](/upload/InfoBanner/zyjiaocheng/803/bf13b69c4fb240878c8633a76e52351f.jpg)
我需要一个包含命名列和行的数据结构.例如:
magic_data_table:
col_foo col_bar
row_foo 1 3
row_bar 2 4
我需要能够访问magic_data_table [“row_foo”,“col_bar”]等元素(这会给我3个)
我还需要能够添加新列,如:
magic_data_table.Columns.Add("col_new");
magic_data_table["row_foo", "col_new"] = 5;
AFAIK,DataTable只有命名列…
编辑:
我不需要更改列或行的名称.但是,我可能需要在表的中间插入新行.
解决方法:
虽然你可以使用Dictionary< string,Dictionary< string,T>>做你想做的事,在内存方面不会特别有效,并且内部词典可能会失去同步.如果您创建自己的数据结构,虽然这是列表的外观,使用字典将列名映射到索引,那么它很简单:
public class MyDataStructure<T>//TODO come up with better name
{
private Dictionary<string, int> columns;
private Dictionary<string, int> rows;
private List<List<T>> data;
public MyDataStructure(
IEnumerable<string> rows,
IEnumerable<string> columns)
{
this.columns = columns.Select((name, index) => new { name, index })
.ToDictionary(x => x.name, x => x.index);
this.rows = rows.Select((name, index) => new { name, index })
.ToDictionary(x => x.name, x => x.index);
initData();
}
private void initData()
{
data = new List<List<T>>(rows.Count);
for (int i = 0; i < rows.Count; i++)
{
data.Add(new List<T>(columns.Count));
for (int j = 0; j < columns.Count; j++)
{
data[i].Add(default(T));
}
}
}
public T this[string row, string column]
{
//TODO error checking for invalid row/column values
get
{
return data[rows[row]][columns[column]];
}
set
{
data[rows[row]][columns[column]] = value;
}
}
public void AddColumn(string column)
{
columns.Add(column, columns.Count);
for (int i = 0; i < data.Count; i++)
{
data[i].Add(default(T));
}
}
public void AddRow(string row)
{
rows.Add(row, rows.Count);
var list = new List<T>(columns.Count);
data.Add(list);
for (int i = 0; i < columns.Count; i++)
{
list.Add(default(T));
}
}
public bool RenameRow(string oldRow, string newRow)
{
if (rows.ContainsKey(oldRow) && !rows.ContainsKey(newRow))
{
this.Add(newRow, rows[oldRow]);
this.Remove(oldRow);
return true;
}
return false;
}
}
请注意,如果您愿意在构造时修改行/列,那么您将能够使用T [,]作为数据的支持,这将使该类实现更加简单,并进一步减少内存开销,虽然这似乎不适用于您的用例.
内容总结
以上是互联网集市为您收集整理的在C#中是否存在带有“命名行”的“DataTable”?全部内容,希望文章能够帮你解决在C#中是否存在带有“命名行”的“DataTable”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。