给定一串Key:Value对,我想创建一个查找散列但是键的小写值.我可以使用此代码完成此操作
my $a="KEY1|Value1|kEy2|Value2|KeY3|Value3";
my @a = split '\|', $a;
my %b = map { $a[$_] = ( !($_ % 2) ? lc($a[$_]) : $a[$_]) } 0 .. $#a ;
Run Code Online (Sandbox Code Playgroud)
生成的Hash看起来像这个Dumper输出:
$VAR1 = {
'key3' => 'Value3',
'key2' => 'Value2',
'key1' => 'Value1'
};
Run Code Online (Sandbox Code Playgroud)
是否可以直接创建哈希%b而不使用临时数组@a,或者是否有更有效的方法来实现相同的结果?
编辑: 我忘了提到我不能使用外部模块.它需要是基本的Perl.
您可以使用List :: Util中的pairmap来完成此操作而无需中间数组.
use strict;
use warnings;
use List::Util 1.29 'pairmap';
my $str="KEY1|Value1|kEy2|Value2|KeY3|Value3";
my %hash = pairmap { lc($a) => $b } split /\|/, $str;
Run Code Online (Sandbox Code Playgroud)
注意:你不应该在sort(或List :: Util对函数)块之外使用$ a或$ b.它们是排序的特殊全局变量,只是my $a在范围内声明可以破坏该范围内的所有排序(和List :: Util对函数).一个简单的解决方案是立即替换他们$x和$y无论何时你发现自己开始用它们作为例子变量.
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |