我有一个Perl散列的哈希值...大约11或12个元素深.请原谅我没有重复下面的结构!
一些级别具有固定标签,例如'NAMES','AGES'或类似,因此访问这些级别是好的,因为我可以直接使用标签,但我需要循环其他变量,这导致一些非常长的语句.这是一组循环的一半示例:
foreach my $person (sort keys %$people) {
foreach my $name (sort keys %{$people->{$person}{'NAMES'}}) {
foreach my $age (sort keys %{$people->{$person}{'NAMES'}{$name}{'AGES'}}) {
. . . # and so on until I get to the push @list,$element; part
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,但它遵循我所拥有的结构.没有固定名称部分(大写字母中的元素)可能会更短,但是出于参考目的需要它们.
我尝试将这些元素作为哈希来缩短它,以便在每个阶段缩短它,例如,对于第二个foreach,我尝试了各种形式:
foreach my $name (sort keys %{$person->{'NAMES'}})
Run Code Online (Sandbox Code Playgroud)
但这没用.我确定我以前见过类似的东西,所以语义可能不正确.
我已经研究过关于Hash of Hashes的页面以及对哈希及其元素的引用等等,但没有运气.我已经看过while each循环的例子,但它们似乎没有特别简短或更容易实现.也许只有一种不同的方法可以做到这一点,我忽略了这一点.我已经写出了一整套foreach循环,如果我不必再重复六次左右就会很棒.
当然,可能没有'简单'的方式,但所有的帮助赞赏!
我想使用jedis(Redis缓存)和java存储多个具有单值的键.
我有三个按键,例如user_1,driver_10,admin_5和值= this is user,我想用这三个当中的任何一个键获得值.
我是Perl的新手.我需要在Perl中定义一个如下所示的数据结构:
city 1 -> street 1 - [ name , no of house , senior people ]
street 2 - [ name , no of house , senior people ]
city 2 -> street 1 - [ name , no of house , senior people ]
street 2 - [ name , no of house , senior people ]
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?
当尝试访问数组数组深处的元素时,如果元素不存在,避免出现错误“undefined method `[]” for nil:NilClass”的最佳方法是什么?
例如,我目前正在这样做,但对我来说似乎很糟糕:
if @foursquare['response']['groups'][0].present? && @foursquare['response']['groups'][0]['items'].present?
Run Code Online (Sandbox Code Playgroud) 我有一个json结构,我正在解码,看起来像这样:
person => {
city => "Chicago",
id => 123,
name => "Joe Smith",
pets => {
cats => [
{ age => 6, name => "cat1", type => "siamese", weight => "10 kilos" },
{ age => 10, name => "cat2", type => "siamese", weight => "13 kilos" },
],
dogs => [
{ age => 7, name => "dog1", type => "siamese", weight => "20 kilos" },
{ age => 5, name => "dog2", type => "siamese", weight …Run Code Online (Sandbox Code Playgroud) 我想知道,在Moose中存储哈希哈希的最佳方法是什么.让我们举一个像这样的Hash:
my %hash = ('step1' => {'extraction' => \$object1,
'analysis' => \$object2},
'step2' => {'extraction' => \$object3,
'analysis' => \$object4});
Run Code Online (Sandbox Code Playgroud)
但我想将这个保存在驼鹿属性中.我该如何组织访问(阅读,写作).网上的例子主要是"扁平"哈希.但是你可以使用像Moose :: Meta :: Attribute :: Native :: Trait :: Hash这样的助手.哈希散列有类似的东西吗?
原因是,我想迭代步骤键并访问其中的对象实例.或者是否有更好的,更像Moose的方式来做到这一点?
提前致谢!!!
有一个问题可以解释我想要的内容:如何在perl中合并2个深哈希
但是,那里的答案似乎对我不起作用(建议使用该Merge模块).
我有两个哈希像这样:
$VAR1 = {
'57494' => {
'name' => 'John Smith',
'age' => '9',
'height' => '120'
},
'57495' => {
'name' => 'Amy Pond',
'age' => '17',
'height' => '168'
}
}
};
$VAR1 = {
'57494' => {
'name_address' => 'Peter Smith',
'address' => '5 Cambridge Road',
'post_code' => 'CR5 0FS'
}
}
};
Run Code Online (Sandbox Code Playgroud)
如果我使用Hash::Merge或%c = {%a,%b}格式我每次都得到这个:
$VAR1 = '57494';
$VAR2 = {
'name_address' => 'Peter Smith',
'address' …Run Code Online (Sandbox Code Playgroud) 什么是最简洁的方法来确定是否@hash[:key1][:key2]已定义,如果@hash或@hash[:key1]为零,则不会抛出错误?
defined?(@hash[:key1][:key2])如果@hash[:key1]存在则返回True (它不确定是否:key2已定义)
好吧,如果我有一个散列哈希代表这样的书:
Books =
{"Harry Potter" => {"Genre" => Fantasy, "Author" => "Rowling"},
"Lord of the Rings" => {"Genre" => Fantasy, "Author" => "Tolkien"}
...
}
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以简洁地在书籍哈希中获得所有作者的数组?(如果为多本书列出了同一作者,我会在每本书的数组中需要一次他们的名字,因此无需担心删除重复项)例如,我希望能够以下列方式使用它:
list_authors(insert_expression_that_returns_array_of_authors_here)
Run Code Online (Sandbox Code Playgroud)
有谁知道如何制作这种表达方式?非常感谢您提供的任何帮助.
谁能告诉我这里我做错了什么?我已经尝试了几乎所有可能的数组/散列类型和排序查询的组合,我能想到并且似乎无法使其工作.
我试图通过以下方式对哈希引用进行排序value1:
my $test = {
'1' => { 'value1' => '0.001000', 'value2' => 'red'},
'2' => { 'value1' => '0.005000', 'value2' => 'blue'},
'3' => { 'value1' => '0.002000', 'value2' => 'green'},
'7' => { 'value1' => '0.002243', 'value2' => 'violet'},
'9' => { 'value1' => '0.001005', 'value2' => 'yellow'},
'20' => { 'value1' => '0.0010200', 'value2' => 'purple'}
};
Run Code Online (Sandbox Code Playgroud)
使用此排序循环:
foreach (sort { $test{$a}->{'value1'} <=> $test{$b}->{'value1'} } keys \%{$test} ){
print "key: $_ value: $test->{$_}->{'value1'}\n"
} …Run Code Online (Sandbox Code Playgroud)