我对perl嵌入式函数有疑问。 您认为,“地图”功能可以帮助我弹出数组中的所有元素(如果已经存在于另一个数组中)吗?
这些是数组:
名为OLDER_EVENTS的数组:
my @older_events = (
surname => [
qw(
red
brown
simpson
donald
)
],
date => [
qw(
2018/02/14
2018/03/09
2018/05/01
2018/08/02
)
],
time => [
qw(
01:00:52
01:06:41
03:24:31
19:14:31
)
]
);
ARRAY命名了新元素:
my @new_events = (
surname => [
qw(
simpson
donald
blanco
ernald
)
],
date => [
qw(
2018/03/09
2018/08/02
2018/08/01
2018/08/14
)
],
time => [
qw(
03:24:31
19:14:31
00:03:16
09:21:45
)
]
);
在新事件中,最后两个条目是新的,因此,我将从@new_events中弹出元素1和2,因为它已经存在于@older_events中
如何使用智能解决方案呢?
我可以使用第三个数组吗?还是可以从@older_events中弹出它?
感谢您的关注
答案 0 :(得分:7)
首先,您将数组用于键值对。这没用。
my %older_events = @older_events;
my %newer_events = @newer_events;
第二,您想对记录执行操作,但是您的数据没有组织成记录。
my @older_events =
map {
+{
surname => $older_events->{ surname }[$_],
date => $older_events->{ date }[$_],
time => $older_events->{ time }[$_],
}
}
0..$#{ $older_events->{surname} };
my @newer_events =
map {
+{
surname => $newer_events->{ surname }[$_],
date => $newer_events->{ date }[$_],
time => $newer_events->{ time }[$_],
}
}
0..$#{ $newer_events->{surname} };
第三,我们需要一种快速的方法来查找事件是否在@older_events
中。
sub key { join "\0", @{ $_[0] }{qw( surname date time )} }
my %older_event_by_key =
map { key($_) => $_ }
@older_events;
最后,我们可以grep
@newer_events =
grep { !$old_event_by_key{ key($_) } }
@newer_events;