在C#中,有没有开箱即用的方法来构建3向查找表?
我有一个内存“表”,可能看起来像这样:
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} 该表是在运行时根据用户的操作构建的,并且不能存储在数据库中,因为它在无法保证数据库连接的部分中使用. 现在,我“只是”(哈!)存储这个用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>.你可以使用循环来搜索它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |