JNI*_*oad 7 ruby arrays hash ruby-on-rails multidimensional-array
我正在尝试使用动态密钥和相应的值创建哈希.比如这样
hash = {1 => 23.67, 1 => 78.44, 3 => 66.33, 12 => 44.2}
Run Code Online (Sandbox Code Playgroud)
像这样的1,2,12是数组索引.我希望这是可以理解的.我正在尝试使用ROR教程中的语法.
像这样
test = Hash.new
for i in 0..23
if (s.duration.start.hour == array[i].hour)
s.sgs.each do |s1|
case s1.type.to_s
when 'M'
test ={i => s1.power} # here I am trying to create hash like give example in which i is for loop value
when 'L'
puts "to be done done"
else
puts "Not Found"
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
更新的代码
test = Hash.new
for i in 0..23
if (s.duration.start.hour == array[i].hour)
s.sgs.each do |s1|
case s.type.to_s
when 'M'
puts s1.power;
test[i] = s1._power
when 'L'
puts "to be done"
else
puts "Not Found"
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
结果
在遍历
for t in 0..array.size
puts test[t]
end
Run Code Online (Sandbox Code Playgroud)
结果:
t = 68.6 # which is last value
Run Code Online (Sandbox Code Playgroud)
并期待
t = 33.4
t = 45.6 etc
Run Code Online (Sandbox Code Playgroud)
样本日志
after assign {23=>#<BigDecimal:7f3a1e9a6870,'0.3E2',9(18)>}
before assign {23=>#<BigDecimal:7f3a1e9a6870,'0.2E2',9(18)>}
after assign {23=>#<BigDecimal:7f3a1e9ce550,'-0.57E2',9(18)>}
before assign {23=>#<BigDecimal:7f3a1e9ce550,'-0.57E2',9(18)>}
Run Code Online (Sandbox Code Playgroud)
如果有任何其他优化的解决方案,那将是非常感谢
您将test在每次迭代时使用新哈希重新分配.你应该添加它,而不是
test ={i => s1.power}
Run Code Online (Sandbox Code Playgroud)
你应该做:
test[i] = s1.power
Run Code Online (Sandbox Code Playgroud)
这会将 key的值设置i为s1.power
如果你想保留给定键的所有值的数组,我会建议以下(更多ruby-ish)解决方案:
hour_idx = array.find_index { |item| s.duration.start.hour == item.hour }
values = case s.type.to_s
when 'M'
s.sgs.map(&:_power)
when 'L'
puts "to be done"
else
puts "Not Found"
end
test = { hour_idx => values }
Run Code Online (Sandbox Code Playgroud)
我在这里做的是:
hour_idx当前相关的内容s(我假设只有一个这样的项目)s.type(如果它是'M'所有的阵列_power中s.sgs,对于'L'任何你需要的地图,和nil其他)| 归档时间: |
|
| 查看次数: |
13552 次 |
| 最近记录: |