Ruby - 将初始化数组转换为带数字的普通数组?

时间:2013-11-30 15:29:19

标签: ruby arrays

假设我得到了这个输入.txt

10000, 150
345, 32

当我从输入文件初始化为类似这样的类时:

class A
    def initialize(b,c)
    @b = b
    @c = c
    end
end

input = File.open("data", "r")
input.each do |line|
    l = line.split(',')
    arr << A.new(l[0], l[1])
end

p arr

我得到这个输出[#A:0x00000002816440 @ b =“10000”,@ c =“150”&gt;

我怎样才能把它变成像这样的数组

[[10000, 150][345, 32]]

3 个答案:

答案 0 :(得分:2)

Neil提出的改进。

File.readlines("input.txt").map{|s| s.split(",").map(&:to_i)}
# => [[10000, 150], [345, 32]]

答案 1 :(得分:1)

假设input.txt包含以下数据:

10000, 150
500, 10
8000, 171
45, 92

我可以想到如下:

class A
  def initialize(b,c)
    @b = b
    @c = c
  end
  def attrs
    instance_variables.map{|var| instance_variable_get(var).to_i}
  end
end

input = File.open('/home/kirti/Ruby/input.txt', "r")
ary = input.each_with_object([]) do |line,arr|
  l = line.split(',')
  arr << A.new(*l).attrs
end

ary
# => [[10000, 150], [500, 10], [8000, 171], [45, 92]]

答案 2 :(得分:0)

我认为你可以做两件事:

  • 将字符串输入转换为数字

  • 假设您已进一步使用class A,请在课程中添加.to_a方法

你可以在多个地方做第一部分,但一件简单的事情是让课程对转换进行整理。然后生成的代码如下所示:

class A
  def initialize(b,c)
    @b = b.to_i
    @c = c.to_i
  end

  def to_a
    [ @b, @c ]
  end
end

input = File.open("data", "r")
input.each do |line|
    l = line.split(',')
    arr << A.new(l[0], l[1]).to_a
end

p arr