Favorite# Name Profession --------- ---------- ------------------ 3 Names.Adam Profession.Baker 9 Names.Bob Profession.Teacher 7 Names.Carl Profession.Coder 7 Names.Dave Profession.miner 5 Names.Fred Profession.Teacher
我想做的是使用3个字段中的任何一个进行快速有效的查找.
换句话说,我想:
> myTable [3]和myTable [Names.Adam]和myTable [Professions.Baker]全部返回{3,Names.Adam,Profession.Baker}
> myTable [Profession.Teacher]返回{9,Names.Bob,Profession.Teacher}和{5,Names.Fred,Profession.Teacher}.
该表是在运行时根据用户的操作构建的,并且不能存储在数据库中,因为它在无法保证数据库连接的部分中使用.
现在,我“只是”(哈!)存储这个用3尤伯杯字典,每个键使用的列(FavoriteNumber,姓名,职业)中的一个,并且在尤伯杯字典持有2个字典的每个值都自身带有钥匙每个剩余的列(因此“名称”超级字典中的值的类型为Dictionary< FavoriteNumber,Profession []>和Dictionary< Profession,FavoriteNumber []>
这需要2个字典中的2个查找,以及数组的另一个遍历(通常包含1或2个元素.)
任何人都可以提出更好的方法吗?我不介意花费额外的内存,因为表可能很小(不超过20个条目)但我愿意牺牲一点cpu来使它更容易维护代码……
解决方法
class Person { public int FavoriteNumber; public string Name; public string Profession; }
您可以使用LINQ搜索集合.
IList<Person> people = /* my collection */; var selectedPeople = people.Where(p => p.FavoriteNumber = 3); var selectedPeople2 = people.Where(p => p.Name == "Bob"); var selectedPeople3 = people.Where(p => p.Profession = "Teacher");
或者如果您更喜欢普通的LINQ语法
var selectedPeople4 = from p in people where p.Name == "Bob" select p;
这些selectedPeople变量中的每一个都将被输入为IEnumerable< Person>.你可以使用循环来搜索它们.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。