perl – Whay是将哈希内部翻出来的最优雅方式吗?

将哈希内部转化为最优雅的方法是什么?

我的意思是用值替换键,反之亦然(假设所有值都是100%唯一的).

例如.

从…开始

my %start = (1=>"a",2=>"b",3=>"c");

# ...

# PROFIT: 
my %finish = ("c" => 3,"b" => 2,"a" => 1);

我知道我可以用蛮力的方式做到这一点:

foreach my $key (keys %start) {
    my $value = $start{$key};
    $finish{ $value } = $key;
}

但这不是最优雅的方式!

解决方法

反向可能是最惯用的方式之一:
my %finish = reverse %start;

这是有效的,因为reverse将%start hash作为表单列表(key1 value1 key2 value2 … keyN valueN);然后反向反转列表(valueN keyN … value1 key1).将该列表分配给哈希变量然后将其转换为哈希,其中奇数元素成为键,甚至元素成为值

或者您可以使用地图(不太优雅,但仍然是惯用的):

my %finish = map { ( $start{$_} => $_ ) } keys %start;

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...