在Ruby中将数组复制到对象 [英] Complex mapping of array to object in Ruby

查看:93
本文介绍了在Ruby中将数组复制到对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个字符串数组:

  [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(username,String)等。数组的长度将始终为2的倍数。



有人知道这是否可以使用地图样式方法调用?

解决方案

1.8.6:

  require'枚举器'
result = []
arr = [username,String,password,String]
arr.each_slice(2){| name,type |结果< Field.new(名称,类型)}

或者Magnar的解决方案稍短一点。 >

对于1.8.7+,您可以执行以下操作:

  arr.each_slice(2 ).map {| name,type | Field.new(name,type)} 


I have an array of strings:

["username", "String", "password", "String"]

And I want to convert this array to a list of Field objects:

class Field
    attr_reader :name, :type
    def initialize(name, type)
        @name = name
        @type = type
    end
end

So I need to map "username", "String" => Field.new("username", "String") and so on. The length of the array will always be a multiple of two.

Does anyone know if this is possible using a map style method call?

解决方案

1.8.6:

require 'enumerator'
result = []
arr = ["username", "String", "password", "String"]
arr.each_slice(2) {|name, type| result << Field.new(name, type) }

Or Magnar's solution which is a bit shorter.

For 1.8.7+ you can do:

arr.each_slice(2).map {|name, type| Field.new(name, type) }

这篇关于在Ruby中将数组复制到对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆