2011-08-25 93 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輸出將有助於澄清這一點。