2017-06-19 72 views
1

我正在开发一个程序,以将用户同步到不同的LDAP服务器。我有两种类型的用户组:Master-Groups和Target-Groups(它们是在配置文件中预定义的,可以有多个主组和每个组定义的目标)。 目标组中缺少主组的用户应添加到目标中,主组中缺少目标组的用户应从目标中删除。Perl:在对象列表中快速查找对象 - 查找合适的数据结构

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

我循环访问我的可用主控组,并且必须执行快速查找,以查看用户是否已经成为目标组的一部分。我很努力地选择正确的数据结构来解决这个问题。我试图使用散列,但很快意识到,散列密钥stringyfied,所以无法用于存储对象执行

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

当使用的阵列,每次我必须检查如果用户对象存在,我必须通过整个阵列循环,这基本上杀死了性能。

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

亲切的问候, Yulivee

+0

您是否有任何可以识别对象的字段?如果是的话,你可以在散列中使用这个字段作为散列键。例如:$ master_members - > {$ target_user_object-> ID}。 –

+0

为什么你用_mouse_标记这个? – simbabque

回答

1

你说得对,哈希键字符串化。你不能使用对象作为键。但散列是正确的数据结构。

而不是让Perl将您的引用串联化,建立您自己的序列化程序。这可以像使用cn一样简单。或者是对象所有字段的连接。做一个子,把它放在那里,在你的exist内调用这个子。

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