// 扁平化 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) 我有一个包含数百个对象和值组合的文件,如下面的方式.我希望从用户获取输入作为对象名称和数值并返回该关联值.
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并完成这项工作来帮助我的同行.如果这是一个新手问题,请原谅.
注意: - 我要用任何文件格式创建文件,这将是一个很大的帮助.
我有多个 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而已。为了与其他人一起工作,我必须做一个循环。但嵌套了多少个键尚不清楚。
如何迭代区域设置哈希的所有值并保持架构完整?
如果可能但不是强制性的,如果我们能够在最终结果中保持键的顺序,我会非常高兴。如果稍后在手动检查时找到丢失的密钥,那就太棒了。 …
我有两个哈希:
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) 我在对象中有一个对象数组,并尝试减少为特定形式的数组。例如:
[
#<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) 我有这样的哈希:
hash = {"str1"=>5, "str2"=>9, "str3"=> 3}
Run Code Online (Sandbox Code Playgroud)
hash.keys 结果就是这样 ["str1", "str2", "str3"]
hash.values 结果就是这样 [5, 9, 3]
我正试图通过Axlsx使用将其导出为excelsheet.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) 我有一个哈希:
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)
有什么想法吗?谢谢
我正在使用这样的散列,第一个键是散列
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 会这样?我该如何解决?
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) 我只想从 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 ×10
ruby-hash ×10
arrays ×2
axlsx ×1
dictionary ×1
flatten ×1
iteration ×1
percentage ×1
sum ×1