gpt4 book ai didi

arrays - 反转数组的哈希值

转载 作者:行者123 更新时间:2023-12-03 02:59:33 25 4
gpt4 key购买 nike

我知道如果你这样做可能会发生冲突。但给定数组的哈希值:

my %transform = ( 
'FF0000' => [qw ( error errors assertion )],
'FFFF00' => [qw ( warning warnings paused )],
'008000' => [qw ( active )],
);

我想将其转换为搜索并替换正则表达式。

例如

my %colour_map = ( 
'error' => 'FF0000',
'errors' => 'FF0000',
'assertion' => 'FFFF00',
'warning' => 'FFFF00',
'warnings' => 'FFFF00',
'paused' => 'FFFF00',
'active' => '008000',
);

my $search = join( "|", map {quotemeta} keys %colour_map );
$search = qr/\b($search)\b/;

这样我就可以:

while (<$fh>) {
if ( my ($match) = m/$search/i ) {
print "$colour_map{lc($match)} $match\n";
}
}

我可以接受潜在的冲突(给定的数组不需要唯一性)。

到目前为止我已经得到:

my %colour_map ;
foreach my $colour ( keys %replace ) {
foreach my $value ( @{$replace{$colour}} ) {
$colour_map{$value} = $colour;
}
}

我认为应该有一个使用诸如map之类的解决方案,但我无法弄清楚。

最佳答案

我不会仅仅为了“使用 map 之类的东西”而过于专注。如果您在设计一个以这种方式工作的解决方案时遇到问题,那么当您设法将脚塞进拖鞋时,其他人可能会难以理解它的作用

我相信使用 while 迭代器和 each 是最清晰和最简单的

像这样

use strict;
use warnings;

use Data::Dump;

my %transform = (
'FF0000' => [qw ( error errors assertion )],
'FFFF00' => [qw ( warning warnings paused )],
'008000' => [qw ( active )],
);

my %colour_map;

while ( my ($key, $val) = each %transform ) {
$colour_map{$_} = $key for @$val;
}

dd \%colour_map;

输出

{
active => "008000",
assertion => "FF0000",
error => "FF0000",
errors => "FF0000",
paused => "FFFF00",
warning => "FFFF00",
warnings => "FFFF00",
}

关于arrays - 反转数组的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32353646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com