C# 哪种类型的收藏最好?

C# 哪种类型的收藏最好?,c#,asp.net,collections,C#,Asp.net,Collections,我上一个问题的措辞使人们无法回答。不管说什么,我都能做我需要做的事。我最关心的是哪个选项是最佳的 我正在遍历域的整个Active Directory,并按人员/用户对其进行筛选 然后我需要把这些信息收集起来 我知道我可以和你一起做 List<Users> // Create a model with the information i need and populate it. Dictionary<string, List<Users>> // add a

我上一个问题的措辞使人们无法回答。不管说什么,我都能做我需要做的事。我最关心的是哪个选项是最佳的

我正在遍历域的整个Active Directory,并按人员/用户对其进行筛选

然后我需要把这些信息收集起来

我知道我可以和你一起做

List<Users>  // Create a model with the information i need and populate it.
Dictionary<string, List<Users>> // add a list of users to the string/department
Dictionary<string, Users> // struct or class
Lookup<string, Users>
List//用我需要的信息创建一个模型并填充它。
Dictionary//将用户列表添加到字符串/部门
字典//结构或类
查找
我更多的是寻找最佳的方式,因为使用Active Directory本身可能会很慢,我希望在其他方面优化我的代码

我只需要将部门存储一次,每个部门可以有许多不同的用户

在这种情况下,选择哪种方法最合适

编辑添加:


我需要这个特定代码的唯一原因是为了一个特定的页面,它最终允许我循环浏览内容并建立一个下拉列表。此代码将不会在其他任何地方使用。

通过索引或扫描写入或访问列表时,列表将更快

当通过项的键(O(1)而不是列表中的O(N)或O(logn)访问项时,字典会更快

如果要将所有用户添加到下拉框中,请使用
列表

如果要将所有部门添加到下拉框中,并将该部门的用户添加到其他下拉框中,请使用
字典
,或者进行一些分析,以查看单独列出部门是否有意义

如果要在每次访问页面时重新创建集合,则需要使用realish数据进行一些分析,以查看哪个性能更好

编辑: 根据你的最新情况,比如

class Department
{
    public string Name {get;set;}
    public List<User> Users {get;set;}
}

List<Department> departments;

foo()
{
   foreach(department in departments)
   {
       // emit optgroup
       foreach(user in department.Users)
       {
           // emit option
       }
       // emit /optgroup
   }
}
班级部门
{
公共字符串名称{get;set;}
公共列表用户{get;set;}
}
列出部门名单;
foo()
{
foreach(部门中的部门)
{
//发射optgroup
foreach(部门中的用户。用户)
{
//发射选项
}
//发射/选择组
}
}

或者更好地缓存生成的HTML。

哪个选项是最佳的
对于stackoverflow来说很可能不是一个合适的问题,因为它无法正确回答。如果你想问一些主观的问题,就直接问吧。如果你想改进你的代码,就去问它。什么是“最优的”?按部门查询用户?通过其他字段查询用户?您实际上在尝试做什么?您认为您正在解决什么瓶颈?如果Active Directory是瓶颈,那么如果代码的快速部分比可能的速度慢,又有什么关系呢?如果你想减肥,不要从修剪指甲开始,关键是要选择适合你将要执行的操作的数据结构。例如,哈希表对于搜索精确匹配是最佳的,但是对于搜索部分匹配则是高度非最佳的。数组列表在结尾插入时是优化的,但在开头插入时是高度非优化的。@KrisC我刚刚读到EricLippert是谁。我总是为所有的支持/帮助感到荣幸,但现在我感到有点额外的荣幸。:)谢谢你,如果我需要访问这些信息呢。创建一个下拉列表,需要部门的原因是我将使用
,这样使用下拉列表的人可以很容易地看到哪个用户在哪个部门。@JamesWilson查看更新的答案非常感谢,我想我会按照您的建议选择列表路径。我试图在
ILookup
上查找信息,但没有找到多少运气。我更了解清单。我还将查找缓存结果的信息,我认为这将有助于我所做的事情。再次感谢你。