首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建和遍历散列(深度为n)的散列,深度n处的值是整数?

如何创建和遍历散列(深度为n)的散列,深度n处的值是整数?
EN

Stack Overflow用户
提问于 2012-03-20 23:09:40
回答 2查看 334关注 0票数 0

我想将大小为n的DNA序列存储在所描述的数据结构中。每个散列可以包含将具有散列值的关键字C、G、A、T。这些散列值将是完全相同的散列值-它们将有四个键,C,G,A,T,它们将具有散列值。

这种结构对于n级散列是一致的。但是,最后一级散列将改为具有整数值,这些整数值表示从级别1到级别n的序列计数。

给定数据('CG',' CA ',' TT ','CG'),表明序列CG,CA和TT出现两次,一次和一次。对于此数据,深度将为2。

这将产生散列:%root =( 'C‘=> { 'G’=> 2,'A‘=> 1},'T’=> {'T‘=> 1 })

如何从数据中创建此哈希?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 04:25:37

您需要的是一个函数,get_node($tree, 'C', 'G')返回对"CG“散列元素的引用。然后,您只需递增引用的标量。

代码语言:javascript
复制
sub get_node {
   my $p = \shift;
   $p = \( ($$p)->{$_} ) for @_;
   return $p;
}

my @seqs = qw( CG CA TT CG );

my $tree;
++${ get_node($tree, split //) } for @seqs;

问题是,这个函数已经作为Data::DiverDiveRef存在了。

代码语言:javascript
复制
use Data::Diver qw( DiveRef );

my @seqs = qw( CG CA TT CG );

my $tree = {};
++${ DiveRef($tree, split //) } for @seqs;

在这两种情况下,

代码语言:javascript
复制
use Data::Dumper qw( Dumper );
print(Dumper($tree));

打印

代码语言:javascript
复制
$VAR1 = {
          'T' => {
                   'T' => 1
                 },
          'C' => {
                   'A' => 1,
                   'G' => 2
                 }
        };
票数 4
EN

Stack Overflow用户

发布于 2012-03-20 23:57:01

下面的代码应该可以工作:

代码语言:javascript
复制
use Data::Dumper;

my %data;
my @sequences = qw(CG CG CA TT);

foreach my $sequence (@sequences) {
    my @vars = split(//,$sequence);
    $data{$vars[0]} = {} if (!exists($data{$vars[0]}));
    my $startref = $data{$vars[0]};
    for(my $i = 1; $i < $#vars; $i++) {
    $startref->{$vars[$i]} = {} if (!exists($startref->{$vars[$i]}));
    $startref = $startref->{$vars[$i]};
    }
    $startref->{$vars[$#vars]}++;
}

print Dumper(\%data);

产生:

代码语言:javascript
复制
$VAR1 = {
          'T' => {
                   'T' => 1
                 },
          'C' => {
                   'A' => 1,
                   'G' => 2
                 }
        };
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9789420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档