我需要以下方面的帮助:
我有一个数组和另一个数组:a = [132,175]和b = [132,132,132,175,175]。
我想对这两组进行排序,以便最终结果如下:
132 => [132,132,132]
175 => [175,175]
for i in a
for c in b
if i == c
puts c.inspect
end
end
puts 'Break'
end
输出我得到:
132
132
132
Break
175
175
Break
我尝试了很多不同的方法,但是我无法得到我想要的结果。 谢谢。
答案 0 :(得分:1)
这是许多人中的一种方式:
a = [132,175]
b = [132,132,132,175,175]
a.each_with_object({}) { |e,h| h[e] = [e]*b.count(e) }
#=> {132=>[132, 132, 132], 175=>[175, 175]}
答案 1 :(得分:0)
你的问题不明确。
首先,选择哪些项目最终结果的逻辑不明确。因此,我假设您希望从b
数组中选择的项目对应于a
数组的项目。
其次,不清楚“结果”是指输出还是对象(如哈希)。所以,我假设你想要一个对象结果。
def select_keys keys, array
res = {}
keys.each {|key| res[key] = array.select {|v| v == key}}
res
end
a
=> [132, 175]
b
=> [132, 132, 132, 175, 175]
select_keys a, b
=> {132=>[132, 132, 132], 175=>[175, 175]}
如果您希望select_keys
作为Array方法运行,请尝试以下方法:
class Array
def select_keys array
res = {}
self.each {|key| res[key] = array.select {|v| v == key}}
res
end
end
a.select_keys b
=> {132=>[132, 132, 132], 175=>[175, 175]}
答案 2 :(得分:0)
一般情况下,Ruby不会使用" for ... in"声明,它不是" Ruby方式"。 "每个","地图"或"注入"方法是更好的选择。
2.1.2 :046 > a = [132,175]
=> [132, 175]
2.1.2 :047 > b = [132,132,132,175,175]
=> [132, 132, 132, 175, 175]
2.1.2 :048 > a.inject({}) {|r,e| r.merge({e => b.select{ |v| v == e}})}
=> {132=>[132, 132, 132], 175=>[175, 175]}
稍短一点
2.1.2 :050 > a.inject({}) {|r,e| r.merge({e => [e] * b.count(e)})}
=> {132=>[132, 132, 132], 175=>[175, 175]}
答案 3 :(得分:0)
b = [132,132,132,175,175]
p b.group_by{|el| el} # => {132=>[132, 132, 132], 175=>[175, 175]}