Chinaunix

标题: 求助,从23个多重哈希里找出一个键在哪个哈希名里面? [打印本页]

作者: 赛萌    时间: 2015-10-16 19:45
标题: 求助,从23个多重哈希里找出一个键在哪个哈希名里面?
chrY        16984482        16984483        rs3894        0        -
chrY        2876586        2876587        rs3895        0        -
chrY        19448059        19448060        rs3896        0        +
读23个上述格式的文件,把这些文件的第一列,第三列,和第四列读到23个哈希里,如
$chr1{$dbSNP}{$chr}{$position} = 1;
$chr2{$dbSNP}{$chr}{$position} = 1;
需要从23个哈希里找到$dbSNP是rs45对应的$chr,和$position,请问该怎么办?
作者: MMMIX    时间: 2015-10-16 21:08
回复 1# 赛萌


   
多重循环即可:

  @chr = (\%chr1, \%chr2, ...);

  my ($final_idx, $final_dbSNP, $final_chr);

OUTER:
  for ($idx = 0; $idx < @chr; ++$idx) {
    while (my ($dbSNP, $chrs) = each %{ $chr[$idx] }) {
      while (my ($chr, $poss) = each %$chrs) {
        for my $pos (keys %$poss) {
          if ($pos eq 'rs45') {
            $final_idx = $idx;
            $final_dbSNP = $dbSNP;
            $final_chr = $chr;
            last OUTER;
          }
        }
      }
    }
  }

作者: 104359176    时间: 2015-10-18 21:23
要建立文件名和文件解析生成的哈希的映射表。这样如果找到对应的 key, 就可以返回文件名了。
  1. foreach my ($file_name, $table) (each %file_hash_table) {
  2.     if (find_key_in_hash($key, $table)) {
  3.         say "find $key in $file_name";
  4.     }
  5. }
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2