作者:最爱7色的彩虹 | 来源:互联网 | 2022-12-10 13:46
我有一个关于perl嵌入函数的问题.在您看来,"map"函数可以帮助我弹出一个数组中的所有元素,如果它已经存在于另一个数组中?
这些是数组:
名为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中弹出它吗?
感谢您的关注
1> ikegami..:
首先,您使用数组作为键值对.这没用.
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;