【发布时间】:2012-03-05 08:01:48
【问题描述】:
将哈希从里到外的最优雅的方法是什么?
我的意思是用值替换键,反之亦然(假设所有值都是 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;
}
但这不可能是最优雅的方式!
【问题讨论】:
-
您的蛮力方法无法正常工作。你需要遍历
keys %start。 -
“100% 唯一”是什么意思?你从事广告工作吗?可以“95% 独一无二”吗?你会告诉你的妻子,她是你“95% 独一无二的爱人”吗?
-
@cjm - 你是对的。我进行了编辑以修复代码,并通过将变量声明为在最小范围内的词法来添加一些清理(换句话说,在任何地方添加了
my)。 Ike - 如果您不同意,请随时恢复编辑。 -
@KerrekSB - 我是软件开发人员。这意味着没有重复项,这意味着您不必担心从同一个值映射多个键(在这种情况下,您需要丢失一些键,或者将一组键添加为列表)。如果我的英语不完美,我很抱歉。
-
@Ike 我认为 Kerrek 指出它们要么是独一无二的,要么不是独一无二的,两者之间没有区别。