Ruby中数组到对象的复杂映射

Ruby中数组到对象的复杂映射,ruby,functional-programming,map,Ruby,Functional Programming,Map,我有一个字符串数组: ["username", "String", "password", "String"] 我想将此数组转换为字段对象列表: class Field attr_reader :name, :type def initialize(name, type) @name = name @type = type end end 所以我需要映射“username”,“String”=>Field.new(“username”,

我有一个字符串数组:

["username", "String", "password", "String"]
我想将此数组转换为字段对象列表:

class Field
    attr_reader :name, :type
    def initialize(name, type)
        @name = name
        @type = type
    end
end
所以我需要映射“username”,“String”=>Field.new(“username”,“String”)等等。数组的长度始终是2的倍数


有人知道使用map样式的方法调用是否可以做到这一点吗?

看一看。它应该可以满足您的需要。

看看。它应该满足您的需要。

一个括号内的哈希调用正好满足您的需要。给定

a = ["username", "String", "password", "String"]
然后:


括号内的哈希调用正好满足您的需要。给定

a = ["username", "String", "password", "String"]
然后:

1.8.6:

1.8.6:


仅1.9,FWIW。可惜没有一个地图片,这正是他真正想要的。我不确定也可能是1.8.7。如果你
需要“枚举器”
(stdlib),那么每个地图片也在1.8.6中。绝对不是1.9,我链接的文档仅适用于1.8.71.9,FWIW。可惜没有一个地图片,这正是他真正想要的。我不确定也可能是1.8.7。如果你
需要“枚举器”
(stdlib),那么每个地图片也在1.8.6中。绝对不是1.9版,我链接的文档是1.8.7版的,这就是我要找的。我选择这个作为答案,因为它比用于将多个项目映射到一个对象的哈希方法更具可伸缩性。我选择这个作为答案,因为它比用于将多个项目映射到一个对象的哈希方法更具可伸缩性。感谢Magnar,这是一个我不知道存在的有趣的解决方案。我将使用sepp2k的答案,因为它更通用。据我所知,这只会处理两个对象映射到一个对象的情况,还是我错了?可以使用此方法将四个字符串映射到一个对象吗?哈希括号构造函数从数组中的每个其他值创建一个key=>value对的哈希。因此,它非常适合您的示例,但不,它不适用于较大的构造函数。谢谢Magnar,这是一个有趣的解决方案,我不知道它的存在。我将使用sepp2k的答案,因为它更通用。据我所知,这只会处理两个对象映射到一个对象的情况,还是我错了?可以使用此方法将四个字符串映射到一个对象吗?哈希括号构造函数从数组中的每个其他值创建一个key=>value对的哈希。因此,它非常适合您的示例,但不适合较大的构造函数。
require 'enumerator'
result = []
arr = ["username", "String", "password", "String"]
arr.each_slice(2) {|name, type| result << Field.new(name, type) }
arr.each_slice(2).map {|name, type| Field.new(name, type) }