gpt4 book ai didi

ruby - 无法将 2 个数组组合成一个散列 - ruby

转载 作者:太空宇宙 更新时间:2023-11-03 17:26:22 28 4
gpt4 key购买 nike

我在用 ruby​​ (1.9.2) 中的 2 个数组创建散列时遇到了一些问题

我的问题是一些哈希键是相同的,这似乎会导致问题

所以我的第一个数组(称为 listkey)包含这 5 个项目

puts listkey

service_monitor_errorlog
service_monitor_errorlog
wmt_errorlog
wmt_errorlog
syslog

第二个(称为 listvalue)包含这 5 个项目

puts listvalue

service_monitor_errorlog.0
service_monitor_errorlog.current
wmt_errorlog.0
wmt_errorlog.current
syslog.txt

我想要的是一个包含所有 5 个项目的哈希,例如

{
"service_monitor_errorlog"=>"service_monitor_errorlog.0",
"service_monitor_errorlog"=>"service_monitor_errorlog.current",
"wmt_errorlog"=>"wmt_errorlog.0",
"wmt_errorlog"=>"wmt_errorlog.current",
"syslog"=>"syslog.txt"
}

但是使用hash zip命令

MyHash = Hash[listkey.zip(listvalue)]

我得到了这个哈希值

puts MyHash
{
"service_monitor_errorlog"=>"service_monitor_errorlog.current",
"wmt_errorlog"=>"wmt_errorlog.current",
"syslog"=>"syslog.txt"
}

有人可以帮忙吗?我已经尝试了各种命令来将 2 个数组合并成一个散列,但它们似乎都不起作用

干杯

迈克

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

编辑

我刚刚发现散列必须有唯一的键,所以任何人都可以帮我想出一种方法来组合数组以形成一个散列,其中的值作为数组,例如

{
"service_monitor_errorlog"=>["service_monitor_errorlog.0", "service_monitor_errorlog.current"]
"wmt_errorlog"=> ["wmt_errorlog.0", "wmt_errorlog.current"]
"syslog"=> ["syslog.txt"]
}

最佳答案

在 1.9 中我可能会这样做:

  listkey.zip(listvalue).each_with_object(Hash.new{|h,k| h[k] = []}) do |(k,v), h| 
h[k] << v
end

例子:

a=['a','b','c','a']
b=[1,2,3,4]
a.zip(b).each_with_object(Hash.new{|h,k| h[k]=[]}) { |(k,v), h| h[k] << v }
#=> {"a"=>[1, 4], "b"=>[2], "c"=>[3]}

关于ruby - 无法将 2 个数组组合成一个散列 - ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742643/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com