我有一个字符串数组:
["username", "String", "password", "String"]
我想将此数组转换为Field对象列表:
class Field
attr_reader :name, :type
def initialize(name, type)
@name = name
@type = type
end
end
所以我需要映射“username”,“String”=> Field.new(“用户名”,“字符串”)等。数组的长度始终是2的倍数。
有人知道这是否可以使用地图样式方法调用?
答案 0 :(得分:4)
括号中的Hash调用完全符合您的需要。给定
a = ["username", "String", "password", "String"]
然后:
fields = Hash[*a].map { |name, type| Field.new name, type }
答案 1 :(得分:2)
看看each_slice
。它应该做你需要的。
答案 2 :(得分:2)
1.8.6:
require 'enumerator'
result = []
arr = ["username", "String", "password", "String"]
arr.each_slice(2) {|name, type| result << Field.new(name, type) }
或Magnar的解决方案有点短。
对于1.8.7+,您可以这样做:
arr.each_slice(2).map {|name, type| Field.new(name, type) }