Ruby 将空格分隔的文本值读取为整数并浮动到数组中的更优雅的方法?

Ruby 将空格分隔的文本值读取为整数并浮动到数组中的更优雅的方法?,ruby,code-formatting,Ruby,Code Formatting,我正在寻找一种更优雅的方法来编写以下代码。我试图获取每行的前(2)个值,第一个作为整数,第二个作为浮点,并将它们放入数组中。特别是第3行 v = DATA.each_line.map do |line| t = line.strip.split(/\s+/).take(2) [t[0].to_i, t[1].to_f] end.flatten __END__ 1 6000 ignore this 2 3000 94 4 1000

我正在寻找一种更优雅的方法来编写以下代码。我试图获取每行的前(2)个值,第一个作为整数,第二个作为浮点,并将它们放入数组中。特别是第3行

v = DATA.each_line.map do |line|
    t = line.strip.split(/\s+/).take(2)
    [t[0].to_i, t[1].to_f]
end.flatten

__END__
1       6000    ignore this
2       3000    94
4       1000    110?
100     500
200     250
400     100

您是否查看过scanf()

就像C的
sscanf

require 'scanf'

DATA = <<EOM
1       6000    ignore this
2       3000    94
4       1000    110?
100     500
200     250
400     100
EOM

v = DATA.each_line.map { |line| line.strip.scanf("%d%f") }
puts v.inspect
这是您使用
scanf

require 'scanf'

DATA = <<EOM
1       6000    ignore this
2       3000    94
4       1000    110?
100     500
200     250
400     100
EOM

v = DATA.each_line.map { |line| line.strip.scanf("%d%f") }
puts v.inspect
这样做有用吗?我没有试过,但您可能甚至不需要
条带

那么:

DATA.each|line.map{| l | l.split(''[0..1]}

[编辑]好的,刚刚测试了你的代码。。。您需要浮点和整数以及“展平”数组。。。所以我的答案是:

DATA.each_line.map{l|[l.split(“”)[0]。to_i,l.split(“”)[1]。to_f]}。展平


没有那么优雅:/

scanf()正是我想要的,谢谢!我想我自己会花很长时间才能找到。正如所预测的那样,
条带
是不必要的。还是很高兴能找到另一种方法。啊哈!谢谢@罗杰斯先生实际上是一个非常巧妙的方法。我永远不会记得使用了旧的c scanf,它在这方面做得如此出色。实际上,我的方法将字符串拆分了2次,这很糟糕:/可能会像…map{l}c.l.split('''&&[…])或类似的方法那样进行拆分,但仍然没有那么好。