【问题标题】:perl: how to map an array to a nested hashperl:如何将数组映射到嵌套哈希
【发布时间】:2011-10-04 18:37:36
【问题描述】:

给定一个哈希:

my %stats_info = (
  "2010-10-31T23:30:00",
  [
    ["ASBG_#_Mp_at_bsNo-25_#_sbgMpNoOfSessionSetupAttempts",3290387,],
    ["ASBG_#_Mp_at_bsNo-25_#_sbgMpNoOfMediaStreams", 508],
    ["BSBG_#_Mp_at_bsNo-35_#_sbgMpNoOfSessionSetupAttempts",3289764,],
    ["BSBG_#_Mp_at_bsNo-35_#_sbgMpNoOfMediaStreams", 496],
    ["ASBG_#_Mp_at_bsNo-35_#_sbgMpNoOfSessionSetupAttempts",3289764,],
    ["ASBG_#_Mp_at_bsNo-35_#_sbgMpNoOfMediaStreams", 496],
    ["BSBG_#_Mp_at_bsNo-25_#_sbgMpNoOfSessionSetupAttempts",3290387,],
    ["BSBG_#_Mp_at_bsNo-25_#_sbgMpNoOfMediaStreams", 508],
  ],
  "2010-10-31T23:15:00",
  [
    ["ASBG_#_Mp_at_bsNo-25_#_sbgMpNoOfSessionSetupAttempts",3288736,],
    ["ASBG_#_Mp_at_bsNo-25_#_sbgMpNoOfMediaStreams", 610],
    ["ASBG_#_Mp_at_bsNo-35_#_sbgMpNoOfSessionSetupAttempts",3288113,],
    ["ASBG_#_Mp_at_bsNo-35_#_sbgMpNoOfMediaStreams", 619],
    ["BSBG_#_Mp_at_bsNo-35_#_sbgMpNoOfSessionSetupAttempts",3288113,],
    ["BSBG_#_Mp_at_bsNo-35_#_sbgMpNoOfMediaStreams", 619],
    ["BSBG_#_Mp_at_bsNo-25_#_sbgMpNoOfSessionSetupAttempts",3288736,],
    ["BSBG_#_Mp_at_bsNo-25_#_sbgMpNoOfMediaStreams", 610],
  ],
  "2010-10-31T23:45:00",
  [
    ["BSBG_#_Mp_at_bsNo-25_#_sbgMpNoOfSessionSetupAttempts",3291863,],
    ["BSBG_#_Mp_at_bsNo-25_#_sbgMpNoOfMediaStreams", 445],
    ["ASBG_#_Mp_at_bsNo-35_#_sbgMpNoOfSessionSetupAttempts",3291239,],
    ["ASBG_#_Mp_at_bsNo-35_#_sbgMpNoOfMediaStreams", 449],
    ["ASBG_#_Mp_at_bsNo-25_#_sbgMpNoOfSessionSetupAttempts",3291863,],
    ["ASBG_#_Mp_at_bsNo-25_#_sbgMpNoOfMediaStreams", 445],
    ["BSBG_#_Mp_at_bsNo-35_#_sbgMpNoOfSessionSetupAttempts",3291239,],
    ["BSBG_#_Mp_at_bsNo-35_#_sbgMpNoOfMediaStreams", 449],
  ],
) ;

和一个排序的键数组:

my @timeline = ("2010-10-31T23:15:00", "2010-10-31T23:30:00", "2010-10-31T23:45:00",) ;

以及对similar question 的有用回答

我的问题是:

  • 例如如何将“BSBG_#_Mp_at_bsNo-35_#_sbgMpNoOfMediaStreams”设为“449”的键?

这是我如何访问原始哈希:

foreach my $t (@timeline)   
{ 
    my $i=0 ; 
    while( exists($stats_info{$t}[$i]) )    
    { 
        # counter: $stats_info{$t}[$i][0] , quantify: $stats_info{$t}[$i][1] ; 
        $i = $i+1 ; 
    } 
}

目前的情况是 (counter, quantify) 对是一个数组,我想让这对 counter=>quantify (a hash) 在 $stats_info{$t}

【问题讨论】:

    标签: arrays perl hash map


    【解决方案1】:
    对于我的 $key (@timeline) { 我的 %newhash = (); 对于我的 $pair (@{$stats_info{$key}}) { 我的($k, $v) = @$pair; $newhash{$k} = $v; } $stats_info{$key} = { %newhash }; }

    甚至:

    对于我的 $key (keys %stats_info) { $stats_info{$key} = { 地图 { @$_ } @{$stats_info{$key}} }; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-30
      • 2012-08-05
      • 2017-10-09
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2012-07-15
      相关资源
      最近更新 更多