Perl:在对象列表中快速查找对象 - 寻找合适的数据结构

时间:2017-06-19 08:40:43

标签: perl mouse

我正在开发一个程序,用于在不同的LDAP服务器之间同步用户。我有两种类型的用户组:主组和目标组(这些是在配置文件中预定义的。每个组定义可以有多个主和目标)。 目标组中缺少的主组中的用户应添加到目标中,主组中缺少的目标组中的用户将从目标中删除。

这些组中的用户本身就是对象。我的问题如下:

我遍历我的可用主组并且必须快速查找用户已经是目标组的一部分。我正在努力选择正确的数据结构来解决这个问题。我尝试使用哈希,但很快意识到哈希键是字符串,所以我无法执行

if ( exists( $master_members->{$target_user_object} ) ) 

当使用数组存储对象时,每次我必须检查用户对象是否存在时,我必须遍历整个数组,这实际上会导致性能下降。

如果对象列表中存在特定对象,如何执行查找?

亲切的问候, Yulivee

1 个答案:

答案 0 :(得分:1)

你是正确的,哈希键是字符串化的。您不能将对象用作键。但哈希是正确的数据结构。

不要只让Perl对您的引用进行字符串化,而是构建自己的序列化程序。这可能就像使用cn一样简单。或者是对象的所有字段的串联。制作一个sub,将其放在那里,在exist中调用该子。

... if exists $master_members->{ my_serializer($target_user_object) };