我有一份清单如下:
List<List <T> > userList
Class T { string uniqueidentifier, string param2, int param2}
我有一个uniqueidentifier,我需要在列表中找到具有相同'uniqueidentifier'值的元素T.
我可以使用两个'foreach'循环来完成它。这似乎不是很好的做事方式。我想应该有一些像“查找”这样的内置方法可以做同样的事情并且经过高度优化。
答案 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"));