2015-08-18 35 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

相关问题