在列表列表中查找元素,c#

时间:2010-12-31 22:30:25

标签: c#

我有一份清单如下:

List<List <T> > userList

Class T { string uniqueidentifier, string param2, int param2}

我有一个uniqueidentifier,我需要在列表中找到具有相同'uniqueidentifier'值的元素T.

我可以使用两个'foreach'循环来完成它。这似乎不是很好的做事方式。我想应该有一些像“查找”这样的内置方法可以做同样的事情并且经过高度优化。

5 个答案:

答案 0 :(得分:12)

Find根本没有优化 - 它执行线性搜索,因为这是在未排序列表上唯一有意义的事情。如果你正在寻找一种更好的方法来编写它,你可以使用LINQ:

var element = (from sublist in userList
               from item in sublist
               where item.uniqueidentifier == someid
               select item).FirstOrDefault();

答案 1 :(得分:2)

如果没有索引/散列,“高度优化”的查找将无济于事。最好的办法是更改数据的存储方法,例如树。

如果您在多核系统上并行化搜索,则无需更改存储机制。

答案 2 :(得分:1)

试试这个:

var query =
    from ts in userList
    from t in ts
    where t.uniqueidentifier == uniqueidentifier
    select t;

var user = query.FirstOrDefault();

答案 3 :(得分:1)

我建议你将外部列表更改为Dictionary,然后你可以找到带有唯一标识符的内部列表。

     Dictionary<string, List<T>> myDictionary = new Dictionary<string,List<T>>();
     myDictionary["1"] = innerList;
     List<T> list = myDictionary["1"]; //find list with unique id "1"

答案 4 :(得分:0)

如果这样可行则不是100%..

var match = userList.Where(x=> x.Any(y=>y.uniqueidentifier = "blah"));