gpt4 book ai didi

c# - 包含由列和行字符串索引索引的数据的数据结构

转载 作者:太空狗 更新时间:2023-10-29 21:51:51 25 4
gpt4 key购买 nike

我有一个要显示给用户的对象列表。基本上,它是用户的一组权限。我想显示一个表格,其中用户作为列,操作作为行。然后权限将显示在用户和操作之间的交叉点。

我正在寻找一种在 C# 数据结构中表示此数据的方法。它将允许使用用户(字符串)和操作(字符串)进行访问,并为每个“单元格”提供默认值。理想情况下,它将绑定(bind)到具有自动列创建功能的网格控件。

数组会很棒,但它只允许整数作为索引。添加新行/列时,还需要重新创建和复制数组。

我考虑创建一个 Dictionary<String, Dictionary<String, Permission>>对象,但它需要大量的错误检查并且不能很好地与数据网格控件一起工作。

是否有针对这种数据结构的现有(开源?)项目?基本上,它只是“双键值”结构的增强版。

谢谢

最佳答案

如果您想要一个对具有自动列生成功能的网格控件友好的数据结构,那么选择的数据结构是DataTableDataTable 就像按行和列组织的动态二维数据数组,这正是您想要的。如果事实上这些列是由字符串索引的,这也是您想要的。如果找到一种方法来通过字符串寻址 DataTable 的行,我们需要做的就是一切就绪!

这是 PermissionMap 的实现,它 DataTable,因此您可以将它与网格控件一起使用,但它 有一些基础结构来支持两个字符串的索引。确切的方法可能有所不同,但基本思想是从 DataTable 开始,然后添加:

  • 提供用户操作的构造函数
  • 用于添加新用户和设置默认权限的 AddUser 方法
  • 一个双参数索引器,用于按用户和操作获取和设置权限

这是一个示例实现:

public enum Permission
{
Default = 0,
Disallow = 0,
Allow = 1,
}

public class PermissionMap : DataTable
{
private Dictionary<string, int> actionMap = new Dictionary<string, int>();

public PermissionMap(IEnumerable<string> actions)
{
Columns.Add(new DataColumn("Action"));
int i = 0;
foreach (var action in actions)
{
actionMap.Add(action, i++);
var row = NewRow();
row["Action"] = action;
Rows.Add(row);
}
}

public void AddUser(string user)
{
Columns.Add(new DataColumn(user));
foreach (DataRow row in Rows)
row[user] = Permission.Default;
}

public Permission this[string user, string action]
{
get { return (Permission)Rows[actionMap[action]][user]; }
set { Rows[actionMap[action]][user] = value; }
}
}

下面是一个小演示程序:

class Program
{
static void Main(string[] args)
{
var permissionMap = new PermissionMap(new[] { "Read", "Write" });
permissionMap.AddUser("Bill");
permissionMap.AddUser("Jane");
permissionMap["Bill", "Read"] = Permission.Allow;
permissionMap["Jane", "Write"] = Permission.Allow;
foreach (DataColumn column in permissionMap.Columns)
{
Console.Write(column.ColumnName);
Console.Write(",");
}
Console.WriteLine();
foreach (DataRow row in permissionMap.Rows)
{
foreach (DataColumn column in permissionMap.Columns)
{
Console.Write(row[column]);
Console.Write(",");
}
Console.WriteLine();
}
Console.ReadKey();
}
}

产生这个输出:

Action,Bill,Jane,
Read,Allow,Disallow,
Write,Disallow,Allow,

关于c# - 包含由列和行字符串索引索引的数据的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6228005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com