2012-11-15 55 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

相关问题