如果我有一个具有以下结构(日期、时间、用户)的 perl 数组,按用户排序:
open my $fh, '<', $file;
while( <$fh> ) {
my @lines = split /\n/;
my ($user, $y, $m, $d, $time) = $lines[0] =~ /\A(\w);(\d+)\/(\d+)\/(\d+);(\d+:\d+:\d+.\d+)/; # Encapsulate values
push @evts, { user => $user, date => "$y/$m/$d", time => $time}; # Array loader
} # This was missing.
close($fh);
my @by_usr = sort { $a->{user} cmp $b->{user} } @evts;
如果它具有完全相同的时间,我如何从中删除重复的条目?
$VAR1 = {
'time' => '08:08:36.120',
'date' => '2018/08/06',
'user' => 'USER1'
};
$VAR2 = {
'time' => '08:08:36.120',
'date' => '2018/08/06',
'user' => 'USER1'
};
...(and more)
我试过 unique 函数,但它不起作用:
sub uniq {
my %seen;
grep !$seen{$_}++, @_;
}
my @unique_events = uniq (@by_usr);
我可以提供任何说明。
最佳答案
您只是检查散列引用(当字符串化时)是否唯一。要检查唯一时间,就这样做吧。
grep !$seen{$_->{'time'}}++, @_;
simbabque 的答案检查是否有任何值不同,而不仅仅是时间(假设所有哈希具有相同的键并且没有值包含 ___)。
关于Perl - 从引用的@array 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52334691/