perl hash for循环来获取数字

时间:2014-02-13 07:30:45

标签: perl hash

我有像

这样的哈希
 key                                  value
  1                                  ababababab
 11                                  cdcdcdcdcd
 21                                  efefefefef
 31                                  fgfgfgfgfg
 41                                  ererererer

现在我有一个数组[0] = 5数组[1] = 22 我如何从5-22获得字符串

 abababababcdcdcdcdcdef

我计划使用foreach来比较5和22的密钥,但我不知道如何解决它。

3 个答案:

答案 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方法来使用你的哈希值,但这并不是哈希所做的,这将更加优化和可读。