Che*_*eso 25 arrays perl unique
我在while语句中将元素推送到数组中.每个元素都是教师的名字.当循环结束时,最终在数组中出现重复的教师名称.有时它们在阵列中并不是彼此相邻,有时它们是.
如何在完成获取值后才能打印该数组中的唯一值?每次我想要打印元素时都不必解析整个数组.
在将所有内容推入数组后继承代码:
$faculty_len = @faculty;
$i=0;
while ($i != $faculty_len)
{
printf $fh '"'.$faculty[$i].'"';
$i++;
}
Run Code Online (Sandbox Code Playgroud)
inn*_*naM 42
use List::MoreUtils qw/ uniq /;
my @unique = uniq @faculty;
foreach ( @unique ) {
print $_, "\n";
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*t P 33
您最好的选择是使用(基本上)内置工具,如uniq(如innaM所述).
如果您无法使用uniq并希望保留顺序,则可以使用grep来模拟它.
my %seen;
my @unique = grep { ! $seen{$_}++ } @faculty;
# printing, etc.
Run Code Online (Sandbox Code Playgroud)
这首先给你一个散列,每个键是每个条目.然后,迭代每个元素,计算它们中的元素数量,并添加第一个元素.(更新了brian d foy的评论)
use*_*650 14
我建议把它推到哈希.像这样:
my %faculty_hash = ();
foreach my $facs (@faculty) {
$faculty_hash{$facs} = 1;
}
my @faculty_unique = keys(%faculty_hash);
Run Code Online (Sandbox Code Playgroud)
小智 5
@array1 = ("abc", "def", "abc", "def", "abc", "def", "abc", "def", "xyz");
@array1 = grep { ! $seen{ $_ }++ } @array1;
print "@array1\n";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66983 次 |
| 最近记录: |