L
Larme
Dear all, I'm a newbie to ruby and today when I'm writing a simple
script to process some data, I found something I can't understand.
The data is stored in several column seperated by tab or space. I use
the following code to get the data (assuming the data comes from
standard input and all numbers are integer)
data=[]
counter = 0
while line = STDIN.gets
data[counter] = line.split
data[counter].map! {|str| str.to_i}
counter += 1
end
hence data is an array hold all the numbers in the ith line, data
[j] is the number on ith line and jth column. Then what I want the
script to do is sorting lines according to a specified column. I
thought the following code should work:
result = data.sort {|x, y| x[col] <=> y[col] }
where the col determine which column the script will sort according
to. However ruby raise a error saying:
"undefined method `<=>' for nil:NilClass (NoMethodError)
from ana.rb:16:in `sort'
from ana.rb:16
"
I have to write the code as
result = data.sort {|x, y| x[col].to_i <=> y[col].to_i }
to let the script run properly. I'm quite confused here. I think the
elements of array data are converted to integer when the code
data[counter].map! {|str| str.to_i}
finished. However why ruby still requires a explicit conversion when I
use the data.sort?
script to process some data, I found something I can't understand.
The data is stored in several column seperated by tab or space. I use
the following code to get the data (assuming the data comes from
standard input and all numbers are integer)
data=[]
counter = 0
while line = STDIN.gets
data[counter] = line.split
data[counter].map! {|str| str.to_i}
counter += 1
end
hence data is an array hold all the numbers in the ith line, data
[j] is the number on ith line and jth column. Then what I want the
script to do is sorting lines according to a specified column. I
thought the following code should work:
result = data.sort {|x, y| x[col] <=> y[col] }
where the col determine which column the script will sort according
to. However ruby raise a error saying:
"undefined method `<=>' for nil:NilClass (NoMethodError)
from ana.rb:16:in `sort'
from ana.rb:16
"
I have to write the code as
result = data.sort {|x, y| x[col].to_i <=> y[col].to_i }
to let the script run properly. I'm quite confused here. I think the
elements of array data are converted to integer when the code
data[counter].map! {|str| str.to_i}
finished. However why ruby still requires a explicit conversion when I
use the data.sort?