Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 删除散列中过时的条目,只保留一个最新的键值对_Perl - Fatal编程技术网

Perl 删除散列中过时的条目,只保留一个最新的键值对

Perl 删除散列中过时的条目,只保留一个最新的键值对,perl,Perl,我需要删除hashref中的旧条目。例如,在以下数据部分中,只有“2017/06/28”键值对应保留。 Rest应删除所有键值对。请为我提供如何实现这一目标的想法 数据 $data_hashref = { '2017/06/27' => { 'start' => '13:07:00', 'end' => '23:47:00'

我需要删除hashref中的旧条目。例如,在以下数据部分中,只有“2017/06/28”键值对应保留。 Rest应删除所有键值对。请为我提供如何实现这一目标的想法

数据

$data_hashref = {
          '2017/06/27' => {
                            'start' => '13:07:00',
                            'end' => '23:47:00'
                          },
          '2017/06/15' => {
                            'start' => '07:11:00',
                            'end' => '00:18:00'
                          },
          '2017/06/28' => {
                            'end' => '06:37:00',
                            'start' => '00:06:00'
                          },
          '2017/06/17' => {
                            'start' => '09:17:00',
                            'end' => '10:17:00'
                          }
        };
结果

$data_hashref = {
          '2017/06/28' => {
                            'end' => '06:37:00',
                            'start' => '00:06:00'
                          }
        };
更新:stevieb对这篇文章的评论是正确的。我会尽力解释我做了什么

日期格式从最大部分到最小部分(
YYYY/MM/DD
)。因此,可以使用普通的ascii排序,
cmp

它从最晚日期到最早日期排序。排序结果被分配给
undef
@keys
。然后,最新日期将分配给
undef
,其余钥匙(要删除)将分配给
@keys


delete
使用散列切片
@$href{@keys}
从散列中删除所有较早的日期及其值,只留下最新日期及其值作为散列引用。

只需找到要保留的日期,并将其分配给散列即可

use List::Util qw( maxstr );

my $newest = maxstr keys %$href;

%$href = ( $newest => $href->{$newest} );

查找最新的密钥比对所有密钥进行排序(O(N)vs O(N log N))更有效一些,而且不会更复杂。

我不认为回答OP没有投入任何精力的问题是有帮助的,尤其是当您根本没有弄清楚代码的作用时。本质上,这个代码唯一的答案并没有向OP或者未来的读者解释任何事情。你用了什么代码来解决这个问题?因此,这不是一个代码编写服务,也不应该被视为这样。它是针对特定的编程问题的,在这里,您可以显示您遇到问题的特定代码,并在此基础上获得帮助。
use List::Util qw( maxstr );

my $newest = maxstr keys %$href;

%$href = ( $newest => $href->{$newest} );