我在while语句中将元素推送到数组中.每个元素都是教师的名字.当循环结束时,最终在数组中出现重复的教师名称.有时它们在阵列中并不是彼此相邻,有时它们是.
如何在完成获取值后才能打印该数组中的唯一值?每次我想要打印元素时都不必解析整个数组.
在将所有内容推入数组后继承代码:
$faculty_len = @faculty; $i=0; while ($i != $faculty_len) { printf $fh '"'.$faculty[$i].'"'; $i++; }
innaM.. 42
use List::MoreUtils qw/ uniq /; my @unique = uniq @faculty; foreach ( @unique ) { print $_, "\n"; }
如果可以安装MoreUtils,这可行.并非总是如此. (2认同)
Robert P.. 33
您最好的选择是使用(基本上)内置工具,如uniq(如innaM所述).
如果您无法使用uniq并希望保留顺序,则可以使用grep来模拟它.
my %seen; my @unique = grep { ! $seen{$_}++ } @faculty; # printing, etc.
这首先给你一个散列,每个键是每个条目.然后,迭代每个元素,计算它们中的元素数量,并添加第一个元素.(更新了brian d foy的评论)
use List::MoreUtils qw/ uniq /; my @unique = uniq @faculty; foreach ( @unique ) { print $_, "\n"; }
您最好的选择是使用(基本上)内置工具,如uniq(如innaM所述).
如果您无法使用uniq并希望保留顺序,则可以使用grep来模拟它.
my %seen; my @unique = grep { ! $seen{$_}++ } @faculty; # printing, etc.
这首先给你一个散列,每个键是每个条目.然后,迭代每个元素,计算它们中的元素数量,并添加第一个元素.(更新了brian d foy的评论)
我建议把它推到哈希.像这样:
my %faculty_hash = (); foreach my $facs (@faculty) { $faculty_hash{$facs} = 1; } my @faculty_unique = keys(%faculty_hash);
@array1 = ("abc", "def", "abc", "def", "abc", "def", "abc", "def", "xyz"); @array1 = grep { ! $seen{ $_ }++ } @array1; print "@array1\n";
perldoc中的多个解决方案都回答了这个问题.只需键入命令行:
perldoc -q duplicate