哪种类型的系列最好?

时间:2013-05-22 21:44:11

标签: 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 list of users to the string/department
Dictionary<string, Users> // struct or class
Lookup<string, Users>

我更希望找到最佳方式,因为我自己想要在其他方面优化我的代码,因此Active Directory可能很慢。

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

在这种情况下,最佳选择方法是什么?

编辑添加:

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

1 个答案:

答案 0 :(得分:2)

通过索引或扫描进行书写或访问时,列表会更快。

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

如果您尝试将所有用户添加到下拉框,请使用List<User>

如果您要将所有部门添加到下拉框并将该部门的用户添加到其他下拉列表中,请使用Dictionary<Department, List<User>>并执行一些分析以查看是否有单独的列表是否有意义部门。

如果您要在每次访问页面时重新创建集合,您需要使用真实数据进行一些分析,以查看哪些表现更好。

编辑: 根据您的更新如何

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
   }
}

或更好地缓存生成的HTML。