我有像
这样的哈希 key value
1 ababababab
11 cdcdcdcdcd
21 efefefefef
31 fgfgfgfgfg
41 ererererer
现在我有一个数组[0] = 5数组[1] = 22 我如何从5-22获得字符串
abababababcdcdcdcdcdef
我计划使用foreach来比较5和22的密钥,但我不知道如何解决它。
答案 0 :(得分:5)
my %hash = qw(
1 ababababab
11 cdcdcdcdcd
21 efefefefef
31 fgfgfgfgfg
41 ererererer
);
my @array = (5,22);
my $str = join "", map $hash{$_}, sort {$a <=> $b} keys %hash;
print
my $result = substr($str, $array[0]-1, $array[1]-$array[0]+1);
答案 1 :(得分:0)
首先,你需要追踪你需要的哈希密钥对值。对于5和22,你需要$ hash {1},$ hash {11}和$ hash {21} ..一个小片段
if($a=1;$a<=41;$a+10)
{
if($array[0] >=$a && $array[0] <=$a+10)
{
$starting_hash_key=$a;
}
if($array[1] >=$a && $array[1] <=$a+10)
{
$Ending_hash_key=$a;
}
}
获取两个哈希值之间的所有哈希值。使用substr函数(http://perldoc.perl.org/functions/substr.html)来开始和结束哈希以获取apt字符。
答案 2 :(得分:0)
如果您希望数据像字符串一样工作,为什么要将数据存储在哈希中?把它放在一个字符串中:
my $string = "abababababcdcdcdcdcdefefefefeffgfgfgfgfgererererer";
或者,如果您需要将该哈希存在以供稍后使用,请从中构造一个字符串以用于此操作:
my $string = join "", map $hash{$_}, sort {$a <=> $b} keys %hash;
然后从位置5-22获取子串:
my $fragment = substr $string, 5, 17; # Arguments: string, start, length
我确信你可以找到一种hacky方法来使用你的哈希值,但这并不是哈希所做的,这将更加优化和可读。