2015-08-18 112 views
0

Perl支持的任何簡單解決方案,它可以根據grep中數組中出現的單詞對結果進行排序?根據grep(Perl)數組中出現的字排序結果

例如,您有一個數據庫從數組grep中獲取結果,並且想要首先顯示匹配的最重複單詞的結果。

就像通過相關性給出結果的搜索引擎一樣。

不存在在Perl等在此表達式:

@array_relevance = grep(/given_term/i, @old_array); 

@array_relevance = grep{$_ =~ /given_term/i}@old_array;

其中@array_relevance第一顯示結果,其中 「given_term」 正在發生的最(如5次)然後顯示其中「given_term」發生最少(4,3,2,1次)下降的結果

我的意思是「@old_array」是t他的數據包含多行,這是一個數據庫,這是在文本文件,其中有標題,描述,提交後等

@old_array

時間:

@old_array = "Title:Best marketing firm, Description:Check us out, we have many products which are innovative, Time of post:14:05:2015"; 

然後@array_relevancegrep選擇其要求的內容首先顯示包含最相同的術語下降的結果。

希望它是可以理解的。

+1

見(HTTP:// stackoverflow.com/questions/4519979/in-perl-how-do-i-sort-by-frequency-of-a-value) –

+0

在您的示例中似乎只有'@ old_array'只包含一個元素。什麼是grepping的目的? –

回答

0

這很難找出你所需要的東西,沒有任何數據,但請嘗試以下:?在Perl中,如何排序值的頻率做I]

use warnings; 
use strict; 

my @old = qw(nine one one one two three three); 
my @given_terms = qw(one two three); 

my %seen; 
%seen = map {$_ => ++$seen{$_}} @old; 

print "$_\n" for sort {$seen{$b} <=> $seen{$a}} @given_terms; 
+1

如果沒有'for'循環,不會構建'%seen'會更有意義,所以你不會多次重複'@ old'來刷新它?然後從'@ given_terms'而不是'keys'進行排序? – Sobrique

+0

是的,謝謝Sobrique。我正在倒着看問題。 – stevieb

相關問題