Ruby 将空格分隔的文本值读取为整数并浮动到数组中的更优雅的方法?
我正在寻找一种更优雅的方法来编写以下代码。我试图获取每行的前(2)个值,第一个作为整数,第二个作为浮点,并将它们放入数组中。特别是第3行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
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('''&&[…])或类似的方法那样进行拆分,但仍然没有那么好。