标签: ruby-hash

Ruby 扁平化 JSON 对象或哈希

// 扁平化 JSON 对象 //(想要将嵌套哈希中的所有键合并为字符串,并希望将其输出到数组列表中)

input1 = {a: {b: {c: {} }, d:[] }, e: "e", f: nil, g: -2}
input2 = {a: {b: {c: {h: {j: ''}, m: {n: ''}}}, d: {k: {l: '' } }},e: "e",f: nil,g: -2}
Run Code Online (Sandbox Code Playgroud)

// 上述输入的预期输出应该是一个包含所有这些键(按任意顺序)的数组

output1 = ["g", "f", "e", "a.b.c", "a.d"]
output2 = ["a.b.c.h.j", "a.b.c.m.n", "a.d.k.l", "e", "f", "g"]
Run Code Online (Sandbox Code Playgroud)

ruby flatten ruby-hash

2
推荐指数
1
解决办法
86
查看次数

Ruby - 将文件解析为哈希

我有一个包含数百个对象和值组合的文件,如下面的方式.我希望从用户获取输入作为对象名称和数值并返回该关联值.

Object  cefcFRUPowerOperStatus
Type    PowerOperType 
        1:offEnvOther
        2:on
        3:offAdmin
        4:offDenied
        5:offEnvPower
        6:offEnvTemp

Object  cefcModuleOperStatus
Type    ModuleOperType 
        1:unknown
        2:ok
        3:disabled
        4:okButDiagFailed
        5:boot
        6:selfTest
Run Code Online (Sandbox Code Playgroud)

例如 - 输入 -

           objectName = 'cefcModuleOperStatus'

           TypeNumber = '4'
Run Code Online (Sandbox Code Playgroud)

返回 - 'okButDiagFailed'

我不知道Ruby并完成这项工作来帮助我的同行.如果这是一个新手问题,请原谅.

注意: - 我要用任何文件格式创建文件,这将是一个很大的帮助.

ruby dictionary ruby-hash

1
推荐指数
1
解决办法
382
查看次数

如何在 Ruby 中迭代深度嵌套哈希而不知道深度

我有多个 YAML(本地化)文件。我解析它们并转换为 Ruby 中的哈希值。

例如,这是其中之一:

hello: Hallo
messages:
  alerts:
    yay: Da!
    no: Nein
  deep:
    nested:
      another:
        level:
          hi: Hi!
test: Test!
Run Code Online (Sandbox Code Playgroud)

基本上,这看起来像 Rails App 中使用 YAML 的区域设置文件。

我想做的是递归地迭代这个哈希并获取键和值。这样我就可以像 Google Translate 一样从 API 端点一一翻译值。我想将嵌套哈希保留在同一模式中,以便 Rails 可以通过键查找。

我知道我可以使用嵌套循环,但不能保证嵌套哈希的数量是已知的。如何递归地迭代这个哈希以便我可以操纵值(翻译/替换)?

预期结果:(使用 API 调用的翻译服务后

hello: Hello
messages:
  alerts:
    yay: Yup!
    no: No
  deep:
    nested:
      another:
        level:
          hi: Hi!
test: Test!
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

hello: Hallo
messages:
  alerts:
    yay: Da!
    no: Nein
  deep:
    nested:
      another:
        level:
          hi: Hi!
test: Test!
Run Code Online (Sandbox Code Playgroud)

但这只是操纵hello而已。为了与其他人一起工作,我必须做一个循环。但嵌套了多少个键尚不清楚。

如何迭代区域设置哈希的所有值并保持架构完整?

如果可能但不是强制性的,如果我们能够在最终结果中保持键的顺序,我会非常高兴。如果稍后在手动检查时找到丢失的密钥,那就太棒了。 …

ruby ruby-on-rails ruby-hash

1
推荐指数
1
解决办法
1355
查看次数

Ruby哈希中特定值的总和

我有两个哈希:

first = { 1 => [15, 15, 15, 8], 4 => [11, 12, 7, 7], 5 => [14, 17, 13, 13],
          6 => [19, 19, 15, 15], 7 => [5, 12, 12, 12], 8 => [10, 14, 14, 14], 
          9 => [8, 7, 8, 8] } 

second = { 1 => [0, 1, 2], 4 => [2, 3], 5 => [2, 3], 6 => [0, 1, 2, 3], 
           7 => [1, 2, 3], 8 => [1, 2, 3], 9 …
Run Code Online (Sandbox Code Playgroud)

ruby sum ruby-hash

0
推荐指数
1
解决办法
780
查看次数

迭代对象数组

我在对象中有一个对象数组,并尝试减少为特定形式的数组。例如:

[
  #<Item name: "Item 1", content: #<Item value: #<Item quantity: val1>, #<Item 
quality: val2>>,
  #<Item name: "Item 2", content: #<Item value: #<Item quantity: val1>, #<Item 
quality: val2>>,
  #<Item name: "Item 3", content: #<Item value: #<Item quantity: val1>, #<Item 
quality: val2>>,
  #<Item name: "Item 4", content: #<Item value: #<Item quantity: val1>, #<Item 
quality: val2>>,
  #<Item name: "Item 5", content: #<Item value: #<Item quantity: val1>, #<Item 
quality: val2>>
]
Run Code Online (Sandbox Code Playgroud)

应该减少到

[ [Item1, [val1, val2]], [Item2, [val1, val2]], [Item3, [val1, val2]], [Item4, …
Run Code Online (Sandbox Code Playgroud)

ruby arrays iteration ruby-hash

0
推荐指数
1
解决办法
1171
查看次数

Ruby RoR分别从哈希中获取键和值

我有这样的哈希:

hash = {"str1"=>5, "str2"=>9, "str3"=> 3}
Run Code Online (Sandbox Code Playgroud)

hash.keys 结果就是这样 ["str1", "str2", "str3"]

hash.values 结果就是这样 [5, 9, 3]

我正试图通过Axlsx使用将其导出为ex​​celsheet.add_row

sheet.add_row [hash.keys[0], hash.values[0]]  # hash.keys[0] = "str1" and  hash.values[0] = 5
sheet.add_row [hash.keys[1], hash.values[1]]  # hash.keys[1] = "str2" and  hash.values[1] = 9
sheet.add_row [hash.keys[2], hash.values[2]]  # hash.keys[2] = "str3" and  hash.values[2] = 3
Run Code Online (Sandbox Code Playgroud)

在Excel工作表中,这是结果

海峡

如果哈希值不大但是如果它由20个或更多元素组成,这很简单,这样做这样做根本就不实际!我希望以更好的方式为哈希的所有元素执行此操作.

sheet.add_row [hash.keys[0], hash.values[0]]  
sheet.add_row [hash.keys[1], hash.values[1]] 
sheet.add_row [hash.keys[2], hash.values[2]] 
........
sheet.add_row [hash.keys[19], hash.values[19]] 
Run Code Online (Sandbox Code Playgroud)

ruby arrays axlsx ruby-hash

0
推荐指数
1
解决办法
59
查看次数

Ruby计算哈希中元素的百分比

我有一个哈希:

hash = {"str1"=>2, "str2"=>3, "str3"=>7}
Run Code Online (Sandbox Code Playgroud)

我想计算哈希中每个元素的百分比,所以我可以得到一个这样的:

{"str1"=>16.66% , "str2"=>25.00%, "str3"=>58.33%}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?谢谢

ruby ruby-on-rails percentage ruby-hash

0
推荐指数
2
解决办法
795
查看次数

为什么不解析散列的键

我正在使用这样的散列,第一个键是散列

hash = { { a: 'a', b: 'b' } => { c: { d: 'd', e: 'e' } } }
Run Code Online (Sandbox Code Playgroud)

当我将它转换为 json 时,我得到了这个:

data_json = hash.to_json

# => "{\"{:a=\\u003e\\\"a\\\", :b=\\u003e\\\"b\\\"}\":{\"c\":{\"d\":\"d\",\"e\":\"e\"}}}"
Run Code Online (Sandbox Code Playgroud)

但是当我解析数据时,没有解析第一个键:

JSON.parse data_json

# => {"{:a=>\"a\", :b=>\"b\"}"=>{"c"=>{"d"=>"d", "e"=>"e"}}}
Run Code Online (Sandbox Code Playgroud)

为什么 JSON.parse 会这样?我该如何解决?

ruby ruby-on-rails ruby-hash

0
推荐指数
1
解决办法
56
查看次数

从哈希中删除键值对 (RUBY)

movies = {
  StarWars: 4.8, 
  Divergent: 4.7
  }

print movies
Run Code Online (Sandbox Code Playgroud)

此代码返回一个哈希值:

{:StarWars=>4.8, :Divergent=>4.7}
Run Code Online (Sandbox Code Playgroud)

当我尝试删除键值对并再次打印电影时:

movies = {
  StarWars: 4.8, 
  Divergent: 4.7
  }


movies = movies.delete("Divergent".to_sym)
print movies

 
Run Code Online (Sandbox Code Playgroud)

我得到:

4.7
Run Code Online (Sandbox Code Playgroud)

如何删除键值对,以便在我要求打印电影哈希的内容后得到:

{:StarWars=>4.8}
Run Code Online (Sandbox Code Playgroud)

ruby ruby-hash

0
推荐指数
1
解决办法
2316
查看次数

仅从 Ruby 哈希中提取特定成员

我只想从 dropbox api 返回的以下哈希中提取 team_member_id 和 display_name。

{"members"=>[{"profile"=>{"team_member_id"=>"dbmid:AACHnGyTHHna44224Ad-vVewFDJ9nzS7be9GJ6Tc", "account_id"=>"dbid:AAD234234234x2yGXHsG3guC04Fp8QPwUF9NDO55w", "email"=>"name@domain.com", "email_verified"=>true, "secondary_emails"=>[], "status"=>{".tag"=>"active"}, "name"=>{"given_name"=>"firstname", "surname"=>"lastname", "familiar_name"=>"first", "display_name"=>"firstname lastname", "abbreviated_name"=>"MM"}, "membership_type"=>{".tag"=>"full"}, "joined_on"=>"2017-01-02T20:58:20Z", "groups"=>["g:6fe6b5a111cfc0400000000000000005", "g:6fe6b5a111cfc04000000000000015a1", "g:6fe6b5a111cfc0400000000000002299", "g:6fe6b5a111cfc04000000000000043cb", "g:6fe6b5a111cfc0400000000000056eb3", "g:6fe6b5a111cfc0400000000000058122", "g:6fe6b5a111cfc0400000000000058248", "g:6fe6b5a111cfc04000000000002dd0d9", "g:6fe6b5a111cfc04000000000002dd650"], "member_folder_id"=>"1384307556"}, "role"=>{".tag"=>"team_admin"}}], "cursor"=>"AAAXuLKhvS_T97ZjALBH4A2MCQW_xOp9bu0tAwqGuY1zBg_C-UKVZoBDTQkhU4Hok8nGT15IHN64ZE-88-dlT3242341WD8RgPBg5zfIOQqAdgJlc-Aw", "has_more"=>true}
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的代码并返回 nil。

puts hash['profile']['team_member_id']
Run Code Online (Sandbox Code Playgroud)

从上述哈希中提取单个数据的推荐方法是什么。

ruby ruby-on-rails ruby-hash

0
推荐指数
1
解决办法
57
查看次数