From: Larme Date: 2007-04-22T03:20:05+09:00 Subject: Array.sort problem 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[i] is an array hold all the numbers in the ith line, data[i] [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?