获取键/值对作为数组

时间:2014-01-12 15:07:23

标签: ruby arrays split slice

我一直在努力解决这个问题:完成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})

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]]

答案 2 :(得分: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]]