perl - Perl - 从引用的@array 中删除重复项
问题描述
如果我有一个具有以下结构(日期、时间、用户)的 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)
我尝试了独特的功能,但它不起作用:
sub uniq {
my %seen;
grep !$seen{$_}++, @_;
}
my @unique_events = uniq (@by_usr);
我可以进行任何澄清。
解决方案
您只检查哈希引用(字符串化时)是否唯一。要检查独特的时间,就这样做吧。
grep !$seen{$_->{'time'}}++, @_;
simbabque 的答案检查是否有任何值不同,而不仅仅是时间(假设所有哈希都具有相同的键并且没有值包含___)。
推荐阅读
- python - 如何使用opencv Python tkinter为传送带上的计数对象添加参考线
- python - 在 Python 3 中递归遍历 Ragged JSON Hierarchy 以执行部分叶节点删除
- reactjs - 用 reactjs(px 或 %)或任何其他方式编写样式的最佳实践是什么
- java - 尝试在空对象引用上调用虚拟方法 SupportMapFragment getMapAsync
- javascript - SocketIo - 设置套接字变量不起作用
- javascript - 将数据直接输入到表中
- html - Megamenu 设计定位问题仅 CSS
- kubernetes-helm - Ambassador helm chart 升级失败,资源已存在于集群中且未在上一版本中定义错误
- amazon-iam - AWS CLI2 - 通过联合 SSO 访问 - 在哪里获取“SSO 开始 URL”?
- javascript - 登录页面未重定向到另一个页面