0 c# performance dictionary list
我有一个函数接收三个不同的"人"对象,并根据"people"对象中的组合值生成一个新的"兼容性"对象.
然而,作为输入接收的三个"人"对象的大约1/3的时间与之前的一个相同,尽管可能以不同的顺序.在这些情况下,我不想创建一个新的"得分"对象,而只是返回现有对象中包含的值.
最初,程序只循环遍历"兼容性"对象列表<>,搜索属于这三个"人"的对象(因为每个"兼容性"对象包含一个人对象数组).考虑到有超过数千个"兼容性"对象和超过一百万"人"对象,这种方法非常慢.
我想到了使用字典,其中键是我通过使用XOR将三个人对象的id值组合成单个UInt64而生成的数字,并将得分对象存储为字典值而不是列表.这将时间减少了大约一半,并且在时间性能方面是可以接受的,但是碰撞太多了,并且它经常返回错误的分数.
任何建议或指示将不胜感激.
编辑:要添加到原始问题,每个"人"对象都有一堆我可以使用的其他字段,但问题是制作一个UNIQUE和COMMUTATIVE键.
我认为你是以太复杂的方式看待事物.获取3个PersonID值并对它们进行排序,这样它们总是处于相同的顺序,无论它们传入的顺序如何.然后使用三个PersonID作为键在一个哈希表中设置一个值,用连字符或一些分隔PersonID值中不会出现的其他字符.然后,检查哈希表中是否有一个带有该键的值.
因此,如果三个PersonID是10,5和22,则哈希键可能类似于"5-10-22".