2011-08-25 64 views
0

这是一个非常基本的问题,但我在理解Rubys哈希排序方法时遇到了一些麻烦。在ruby中排序数组的语法

基本上发生了什么是我收到一个不能将字符串转换为整数,所以我的第一个猜测是我通过字符串(这实际上是一个数字)排序数组。该数组包含哈希值,我试图通过我用键标识的哈希值之一对它进行排序。

我怎么继承人选我我的数组:

@receivedArray =(params[:respElementDatas]) 

    puts @receivedArray.class #Its definitely an array 
    @sortedArray = @receivedArray.sort_by{|ed| ed["element_type_id"]} 

我得到的错误是不能转换成字符串整数排序上线。

当然我认为

只是一个简单的问题。 我是说'ed'是存储在数组中的对象,我正确地引用它?还有如何解决它的任何指针?

+0

'puts @ receivedArray.inspect'给出了什么? – rubyprince

回答

0

您的@receivedArray是一个数组数组或者至少有一个数组。例如:

a = [[1,2,3],[4,5,6]] 
[[1, 2, 3], [4, 5, 6]] 
a.sort_by { |e| e['x'] } 
# TypeError: can't convert String into Integer 

a = [{:a => :a},{:b => :b},[1,2,3]] 
[{:a=>:a}, {:b=>:b}, [1, 2, 3]] 
a.sort_by { |e| e['x'] } 
# TypeError: can't convert String into Integer 

a = [{'where' => 'is'},{'pancakes' => 'house'}] 
[{"where"=>"is"}, {"pancakes"=>"house"}] 
a.sort_by { |e| e['x'] } 
# No error this time 
0

尝试ed["element_type_id"].to_i

0

你是正确的说,“编”是存储阵列中的一个对象。 如果数组中的所有元素都是散列,那么您正确地引用它?

一些散列有一个字符串,其他散列有一个整数element_type_id。

我会检查你在哪里混合element_type_id的数据。

你可以尝试ed["element_type_id"].to_i对于一个整数将不起作用,但对于一个字符串将解析为一个整数。

0

看起来您的错误是edArray而不是Hash。这可能是对的数组:[['key1', 'value1'], ['key2', 'value2']],在这种情况下,你会想你的代码更改为:

@sortedArray = @receivedArray.sort_by{ |ed| ed.assoc("element_type_id") } 

由于rubyprince建议,看到的p @receivedArray输出将有助于澄清这一点。