在 Redis 中存储哈希值的最佳方式是什么,如下所示:
\n\nid1->{key1->value1, key2->value2, key3->value3\xe2\x80\xa6.} , id3->{key1->value1, key2->value2, key3->value3\xe2\x80\xa6.} \xe2\x80\xa6.\nRun Code Online (Sandbox Code Playgroud)\n\n其中key1, key2, key3... 是语言的两个字母代码(en、es 等),但其中一些键可以具有不同的语言集,并且一个键可以具有大约 30 种不同的语言。
我将保持我的问题的高度,因为这就是我,这就是我的风格,这就是我需要回答的问题。
我有一个多级哈希可以使用(哈希的哈希)。我还有一些算法可以为我提供 @key 中的一系列键(用于查找各种值)。
我获取个人价值观的技巧是:
只需构建一个如下所示的表达式
$h-> {$key[0] }=> {$key[1]} => ... e.t.c.
Run Code Online (Sandbox Code Playgroud)
然后“评估”该表达式。
是否有更好的技术来处理可变按键序列而不需要 eval?
(哈希是目录结构的镜像。值是单个文件,我的程序需要读取这些文件的内容。)
我尝试过,它适用于 eval 选项。
假设我有一个多维哈希,并且在其中一个子哈希中我有一个key => value对,我需要通过key检索它.我该怎么做?
示例哈希:
h={:x=>1,:y=>2,:z=>{:a=>{:k=>"needle"}}}
h={:k=>"needle"}
Run Code Online (Sandbox Code Playgroud)
关键是永远:k,我需要得到"针"
我注意到红宝石1.8中的哈希没有"扁平"功能,但如果它在那里,我想我会做的
h.flatten[:k]
Run Code Online (Sandbox Code Playgroud)
我想我需要为此编写一个递归函数?
谢谢
现在我的file1包含哈希哈希,如下所示:
package file1;
our %hash = (
'articles' => {
'vim' => '20 awesome articles posted',
'awk' => '9 awesome articles posted',
'sed' => '10 awesome articles posted'
},
'ebooks' => {
'linux 101' => 'Practical Examples to Build a Strong Foundation in Linux',
'nagios core' => 'Monitor Everything, Be Proactive, and Sleep Well'
}
);
Run Code Online (Sandbox Code Playgroud)
而我的file2.pl包含
#!/usr/bin/perl
use strict;
use warnings;
require 'file1';
my $key;
my $key1;
for $key (keys %file1::hash){
print "$key\n";
for $key1 (keys %{$file1::hash{$key1}}){
print "$key1\n"; …Run Code Online (Sandbox Code Playgroud) 我正在努力访问/修改未知(即动态)深度的哈希值。
假设我正在从文件中读取一个测量表(长度,宽度,高度),然后计算“面积”和“体积”以创建如下所示的哈希:
# #Length Width Height Results
my %results = (
'2' => {
'3' => {
'7' => {
'Area' => 6,
'Volume' => 42,
},
},
},
'6' => {
'4' => {
'2' => {
'Area' => 24,
'Volume' => 48,
},
},
},
);
Run Code Online (Sandbox Code Playgroud)
我了解如何访问哈希中的单个项目(例如$results{2}{3}{7}{'Area'}会给我)6,或者我可以使用来检查是否已在输入文件中找到该度量组合exists $results{2}{3}{7}{'Area'}。但是,用{}括号括起来的符号假定我在编写代码时知道会有4层按键。
如果有更多或更少并且我仅在运行时发现该怎么办?例如,如果文件中只有Length和Width,您将如何制作随后访问哈希的代码$results{2}{3}{'Area'}?
即给定一个哈希键和嵌套键的动态长度列表,该键在哈希中可能有也可能没有结果条目,您如何访问哈希以进行基本操作,例如检查该键组合是否具有值或修改该值?
我几乎想要这样的符号:
my @hashkeys = (2,3,7);
if exists ( $hash{join("->",@hashkeys)} ){
print "Found it!\n";
}
Run Code Online (Sandbox Code Playgroud)
我知道您可以访问哈希的子哈希并获取它们的引用,因此在最后一个示例中,我可以进行遍历@hashkeys,检查每个哈希是否当前的哈希在该键处具有子哈希,如果是,则保存对该哈希的引用子哈希用于下一次迭代。但是,这感觉很复杂,我怀疑已经有一种方法可以更轻松地做到这一点。
希望这足以理解我的问题,但是如果没有,我可以尝试建立MWE。 …