我有一系列哈希。一些哈希看起来像这样:
hash1 =
{8=>#<BigDecimal:7f19980a1938,'0.3313035E5',18(27)>}
有些看起来像这样:
hash2 =
{3=>#<BigDecimal:7f19980a0100,'0.416158182E5',18(27)>,
6=>#<BigDecimal:7f1998083870,'0.451966284E5',18(27)>,
7=>#<BigDecimal:7f1998083208,'0.487774386E5',18(27)>}
和其他人看起来像这样:
hash3 =
{1 =>#<BigDecimal:7f1998066e78,'0.680865408E5',18(27)>,
2 =>#<BigDecimal:7f1998066950,'0.680898708E5',18(27)>,
3 =>#<BigDecimal:7f1998066428,'0.680932008E5',18(27)>,
4 =>#<BigDecimal:7f1998065e60,'0.680965308E5',18(27)>,
5 =>#<BigDecimal:7f19980658e8,'0.680998608E5',18(27)>,
6 =>#<BigDecimal:7f1998065348,'0.681031908E5',18(27)>,
7 =>#<BigDecimal:7f1998064998,'0.681065208E5',18(27)>,
8 =>#<BigDecimal:7f1998064358,'0.681098508E5',18(27)>,
9 =>#<BigDecimal:7f199805bb90,'0.681131808E5',18(27)>,
10=>#<BigDecimal:7f199805b550,'0.681165108E5',18(27)>,
11=>#<BigDecimal:7f199805afb0,'0.681198408E5',18(27)>,
12=>#<BigDecimal:7f199805aa88,'0.681231708E5',18(27)>}
我想用这些哈希循环遍历数组,并确保每个哈希有12个键。如果散列具有n < 12
个密钥,则应将12-n
个密钥添加到散列中,即n+1
,n+2
,...,n=12
。所有这些添加的键都应该具有空字符串的值。
例如,hash1
应该成为:
{1=>"", 2=>"", 3=>"", 4=>"", 5=>"", 6=>"", 7=>"",
8=>#<BigDecimal:7f19980a1938, '0.3313035E5', 18(27)>,
9=>"", 10=>"", 11=>"", 12=>""}
和hash2
应该成为:
{1=>"", 2=>"", 3=>#<BigDecimal:7f19980a0100,'0.416158182E5',18(27)>,
4=>"", 5=>"", 6=>#<BigDecimal:7f1998083870,'0.451966284E5',18(27)>,
7=>#<BigDecimal:7f1998083208,'0.487774386E5',18(27)>,
8=>"", 9=>"", 10=>"", 11=>, 12=>""}
我正在尝试遍历数组以创建一个看起来像这样的表:
<table border="border">
<thead>
<th>
Name
</th>
<th>
January
</th>
<th>
February
</th>
<th>
March
</th>
<th>
April
</th>
<th>
May
</th>
<th>
June
</th>
<th>
July
</th>
<th>
August
</th>
<th>
September
</th>
<th>
October
</th>
<th>
November
</th>
<th>
December
</th>
</thead>
<tr>
<th>Seed</th>
<td>26.23</td>
<td>25.23</td>
<td>27.23</td>
<td>25.43</td>
<td>28.23</td>
<td>25.23</td>
<td>25.23</td>
<td>25.23</td>
<td>27.23</td>
<td>27.23</td>
<td>23.23</td>
<td>255.23</td>
</tr>
<tr>
<th>Planting</th>
<td>26.23</td>
<td>25.23</td>
<td>26.23</td>
<td>25.23</td>
<td>27.23</td>
<td>25.43</td>
<td>28.23</td>
<td>25.23</td>
<td>27.23</td>
<td>27.23</td>
<td>23.23</td>
<td>255.23</td>
</tr>
</table>
你能告诉我怎么做或让我知道更好的方法吗?
我编辑了上面的表格,以更好地反映我正在寻找的内容。
以下是我必须使用的内容:
hash4 =
{
"seed" => {8 => # < BigDecimal: 389 c1e8, '0.3313035E5', 18(27) >
},
"planting" => {8 => # < BigDecimal: 3896 fb8, '0.33936408E5', 18(27) >
},
"tilling" => {8 => # < BigDecimal: 3896220, '0.35029368E5', 18(27) >
},
"weed_spray" => {4 => # < BigDecimal: 38959 b0, '0.38035008E5', 18(27) >
},
"fertilzer" => {3 => # < BigDecimal: 3894 c68, '0.416158182E5', 18(27) >,
6 => # < BigDecimal: 388 bde8, '0.451966284E5', 18(27) > ,
7 => # < BigDecimal: 388 aee8, '0.487774386E5', 18(27) >
},
"water" => {12 => # < BigDecimal: 388 a420, '0.51116373E5', 18(27) >
},
"power" => {1 => # < BigDecimal: 38895e8, '0.5150061675E5', 18(27) >,
2 => # < BigDecimal: 3888828, '0.518848605E5', 18(27) >,
3 => # < BigDecimal: 387 fb10, '0.5226910425E5', 18(27) >,
4 => # < BigDecimal: 387e d78, '0.52653348E5', 18(27) >,
5 => # < BigDecimal: 387 da68, '0.5303759175E5', 18(27) >,
6 => # < BigDecimal: 387 cb90, '0.534218355E5', 18(27) >,
7 => # < BigDecimal: 386 b7a0, '0.5380607925E5', 18(27) >,
8 => # < BigDecimal: 3869 fb8, '0.54190323E5', 18(27) >,
9 => # < BigDecimal: 3869158, '0.5457456675E5', 18(27) >,
10 => # < BigDecimal: 3867808, '0.549588105E5', 18(27) > ,
11 => # < BigDecimal: 3866 c50, '0.5534305425E5', 18(27) >,
12 => # < BigDecimal: 3865 d78, '0.55727298E5', 18(27)>
},
"labor" => {11 => # < BigDecimal: 3864 a68, '0.55775115E5', 18(27) >
},
"harvesting" => {5 => # < BigDecimal: 385 ff68, '0.56458215E5', 18(27) >,
6 => # < BigDecimal: 385 f5b8, '0.57141315E5', 18(27) >,
7 => # < BigDecimal: 385e ac8, '0.57824415E5', 18(27) >
},
"loan_repay" => {1 => # < BigDecimal: 382 f318, '0.680865408E5', 18(27) >,
2 => # < BigDecimal: 382e918, '0.680898708E5', 18(27) >,
3 => # < BigDecimal: 382 ddd8, '0.680932008E5', 18(27) >,
4 => # < BigDecimal: 382 d428, '0.680965308E5', 18(27) >,
5 => # < BigDecimal: 382 caa0, '0.680998608E5', 18(27) >,
6 => # < BigDecimal: 3823 c20, '0.681031908E5', 18(27) >,
7 => # < BigDecimal: 3823130, '0.681065208E5', 18(27) >,
8 => # < BigDecimal: 3821380, '0.681098508E5', 18(27) >,
9 => # < BigDecimal: 38204 d0, '0.681131808E5', 18(27) >,
10 => # < BigDecimal: 3813460, '0.681165108E5', 18(27) >,
11 => # < BigDecimal: 38122e0, '0.681198408E5', 18(27) >,
12 => # < BigDecimal: 38115 c0, '0.681231708E5', 18(27) >
}
}
答案 0 :(得分:1)
Just write a helper method like this, which accept your incomplete hash and return 12 key hash in proper order
def prepare_hash(incomplete_hash)
sample_hash, result_hash = {}, {}
(1..12).to_a.each do |val|
sample_hash[val] = ""
end
sample_hash.each do |key, val|
result_hash[key] = incomplete_hash.has_key?(key) ? incomplete_hash[key] : val
end
puts result_hash
result_hash
end
prepare_hash(hash1) # => {1=>"", 2=>"", 3=>"", 4=>"", 5=>"", 6=>"", 7=>"", 8=>"<BigDecimal:7f19980a1938,'0.3313035E5',18(27)>", 9=>"", 10=>"", 11=>"", 12=>""}
答案 1 :(得分:0)
假设您的阵列名为&#34; ary&#34;
ary = [{},{},{}]
ary.each_with_index {|hash, index| puts "#{index} is missing params" if hash.count != 12}