Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何将数组的第二个元素转换为哈希值_Ruby - Fatal编程技术网

Ruby 如何将数组的第二个元素转换为哈希值

Ruby 如何将数组的第二个元素转换为哈希值,ruby,Ruby,我有一个字符串: string = "a@b@c@d@e@f@g@h@...@z" 我想: {:a => "b", :c => "d", :e => "f", ...} 首先,我通过执行以下操作拆分字符串: array = string.split("@") # => [a,b,c,d,e,f.....z] 然后我被卡住了。有人能帮忙吗?result\u hash=hash[*string.split(“@”)]这里我从数组中删除了z,以创建一个包含奇数元素的数组

我有一个字符串:

string = "a@b@c@d@e@f@g@h@...@z"
我想:

{:a => "b", :c => "d", :e => "f", ...}
首先,我通过执行以下操作拆分字符串:

array = string.split("@")
# => [a,b,c,d,e,f.....z]

然后我被卡住了。有人能帮忙吗?

result\u hash=hash[*string.split(“@”)]
这里我从数组中删除了
z
,以创建一个包含奇数元素的数组

> array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y"]
> Hash[ array.each_slice( 2 ).map { |e| e } ]
#=> {"a"=>"b", "c"=>"d", "e"=>"f", "g"=>"h", "i"=>"j", "k"=>"l", "m"=>"n", "o"=>"p", "q"=>"r", "s"=>"t", "u"=>"v", "w"=>"x", "y"=>nil}
用于处理数组中的元素对

如果数组的元素数为偶数,则调用
每个\u片返回的
枚举器
就足以得到所需的结果:

string.split('@').each_slice(2).to_h
但是,如果最后一个切片只有一个项目,则上面的
to_h
将失败

一般解决方案用于确保最后一个切片始终包含两项(第二项为
nil
,如果需要),以防止
失败:

string.split('@').each_slice(2).map{|a,b| [a.to_sym, b]}.to_h

axiac的答案有轻微改进

string.split("@").each_slice(2).with_object({}){|(k, v), h| h[k.to_sym] = v}

这不会创建临时数组。

这是理想的解决方案,但不幸的是,如果
数组中的元素数是奇数,它就不起作用。更新了我的答案,谢谢你的观点,这是理想的解决方案,但不幸的是,如果
数组中的元素数是奇数,它就不起作用了。这是准确的。这就是我想知道的,如果数组有奇数个元素该怎么办。最后一个应该指向零。很好。这似乎不是Rails的问题,但如果未来的读者想要Rails解决方案:ActiveSupport的
in_groups\u of(2)
默认情况下将使用nil填充,并且是
每个片段(2)
的替代品。