2012-11-15 54 views
2

我有兩個數組如何從匹配第二個數組元素的Perl數組中找到元素?

@one = ("1|1|the|dog|ran", "1|2|a|x|b", "2|8|e|s|e"); 
@two = ("1|2|a|x|b", "1|1|down|the|street", "2|8|e|s|e"); 

我需要由前兩個與它們匹配「|」分離的元素。因此,當$ 1 [0]時,搜索將返回$ 2 [1]。

每個陣列中有數百萬行,所以我需要最快的方式來做到這一點。編輯: 對不起,我很抱歉。我想對待第2個「|」分隔的元素(即1 | 2,2 | 1)作爲數組的鍵,循環遍歷第一個數組,並使用該鍵搜索第二個數組以獲取第二個數組中的值。這有幫助嗎?

+0

當你說「第一個」時,你是否確實是指「第一個TWO」?因爲那樣會更有意義。 – TLP

+2

從Perl FAQ開始尋找這裏:[我如何找到兩個數組的交集?](http://learn.perl.org/faq/perlfaq4.html#How-do-I-compute-the-difference-如何做兩個數組 - 我怎麼做 - 我計算 - 兩個數組的交集) –

+0

鑑於每個數組中有數百萬個元素,我們擔心你不能在內存中保存整個數組一旦?陣列會隨着時間的推移而增長,以至於內存確實成爲問題? – DavidO

回答

4
- For each record in the second array, 
    - Parse the record 
    - Add it to a hash keyed by the first two fields. 

- For each record in the first array, 
    - Parse the record 
    - Look in the hash for a record with the appropriate key. 
    - If there is one, 
    - Do something with it. 
+0

如果每個數組中有數百萬行,那麼構建一個要比較的散列可能不太可行。 – TLP

+0

假設內存可以接受它,散列是最好的選擇。 – TLP

+0

@TLP,我不明白爲什麼使用數組+哈希會使用比array +數組更多的內存與相同的數據。事實上,你可以只使用散列,因爲這些散列不需要保存在內存中。 – ikegami

相關問題