当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl数组中打印唯一元素?

如何解决《如何在Perl数组中打印唯一元素?》经验,为你挑选了5个好方法。

我在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的评论)



1> innaM..:
use List::MoreUtils qw/ uniq /;
my @unique = uniq @faculty;
foreach ( @unique ) {
    print $_, "\n";
}


如果可以安装MoreUtils,这可行.并非总是如此.

2> Robert P..:

您最好的选择是使用(基本上)内置工具,如uniq(如innaM所述).

如果您无法使用uniq并希望保留顺序,则可以使用grep来模拟它.

my %seen;
my @unique = grep { ! $seen{$_}++ } @faculty;
# printing, etc.

这首先给你一个散列,每个键是每个条目.然后,迭代每个元素,计算它们中的元素数量,并添加第一个元素.(更新了brian d foy的评论)


我想你真的只是这个意思:我看到了%; @unique = grep {!$ Seen {$ _} ++} @faculty;

3> user54650..:

我建议把它推到哈希.像这样:

my %faculty_hash = ();
foreach my $facs (@faculty) {
  $faculty_hash{$facs} = 1;
}
my @faculty_unique = keys(%faculty_hash);



4> 小智..:
@array1 = ("abc", "def", "abc", "def", "abc", "def", "abc", "def", "xyz");

@array1 = grep { ! $seen{ $_ }++ } @array1;

print "@array1\n"; 



5> Bizmarck..:

perldoc中的多个解决方案都回答了这个问题.只需键入命令行:

perldoc -q duplicate

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有