所以我有一个类的对象列表。在此列表中,我想获取Table.name == "value"
Class Table{
public string name;
private string primarykey;
private string[] columnNames;
//some methods and functions
}
我的问题是使用linq从这个列表中获取指定对象的有效方法,或者我只是通过基本搜索算法循环使用。
使用基本搜索算法我的意思是:
foreach(Table t in tables)
{
if(t.name == "value")
return t;
}
例如,使用linq有更有效的方法吗?
答案 0 :(得分:12)
您可以轻松地使用LINQ,但它不会更有效:
var match = tables.FirstOrDefault(t => t.name == value);
如果没有表符合该条件,则match
将为null
。在这种情况下,你需要弄清楚你想要发生什么。
LINQ代码较短,但仍需要迭代列表中的每个表,直到找到匹配为止。
您可能需要考虑Dictionary<string, Table>
将名称映射到表格 - 但显然要求每个名称只有一个表格。此外,除非你真的有很多桌子,否则你可能会发现它真的没有更快。它是O(1)(假设没有散列冲突)而不是O(n),但是当n很小时,O(n)实际上非常快。我强烈建议你在担心它的效率之前检查这是否真的是一个瓶颈。