2017-06-19 75 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) };