2014-01-12 59 views
0

我一直在努力:完成keysAndValues函数,以便它接受一个对象并将键和值作为单独的数组返回。获取键/值对作为数组

我已经添加了几个版本,所以你可以看到我是如何思考问题的。

def keysAndValues(data) 
     data.each do |data| 
     data.split(key.to_a, value.to_a) 
     end 
     data 
    end 


keysAndValues ({a: 1, b: 2, c: 3}) 


def keysAndValues(data) 
    data.each do |data| 
    data.split([key], [value]) 
    end 
    data 
end 

keysAndValues ({a: 1, b: 2, c: 3}) 


def keysAndValues(data) 
    data.each do |data| 
    data.slice([key], [value]) 
    end 
    data 
end 

keysAndValues ({a: 1, b: 2, c: 3}) 



def keysAndValues(data) 
    data.each do |data| 
    data.slice_to.a(2)([ :a ], [ ' ' ]) 
    end 
    data 
end 

keysAndValues ({a: 1, b: 2, c: 3}) 



def keysAndValues(data) 
    data.each.slice_to.a(2) { |x, y| [x], [y] } 
    end 
    data 
end 

keysAndValues ({a: 1, b: 2, c: 3}) 

回答

2
def keysAndValues(data) 
    [data.keys, data.values] 
end 

keys, values = keysAndValues({a: 1, b: 2, c: 3}) 

keys 
# => [:a, :b, :c] 
values 
# => [1, 2, 3] 

请注意,keysAndValues没有遵循Ruby的命名约定。正确的名字应该是keys_and_values

+0

不能相信我错过了Ruby约定!我花了很长时间试图解决它的标志!我明白了为什么我一直得到一个未定义的方法错误 - 我没有定义键或值。谢谢。 – HandDisco

1

有对于内置的方法:

irb(main):001:0> {a: 1, b: 2, c: 3}.keys 
=> [:a, :b, :c] 
irb(main):002:0> {a: 1, b: 2, c: 3}.values 
=> [1, 2, 3] 

或者,也许你想要吗? (对不起,你的问题我也不清楚)

irb(main):003:0> Array({a: 1, b: 2, c: 3}) 
=> [[:a, 1], [:b, 2], [:c, 3]] 
0
def keys_and_values(data) 
    return data.keys, data.values 
end 

从而:

data_hash = {A 1,B:2,C:3,d:4}

keys_and_values(data_hash)

回报:

[[a:, b:, c:, d:], [1, 2, 3, 4]]