2011-04-16 74 views
2

我想排序包含散列的數組。數組看起來像。排序Ruby數組 - 失敗TypeError:無法將符號轉換爲整數

[:amazon, [{:price=>" 396 ", :author=>"Motwani", :name=>"Randomized Algorithms ", :url=>"", :source=>"amazon"}, 
      {:price=>" 255 ", :author=>"Thomas H. Cormen", :name=>"Introduction To Algorithms ", :url=>"", :source=>"amazon"}]] 

我試圖使用排序這個數組:

source_array.sort_by { |p| p[1][:price] } 

但我一直得到錯誤:

failed with TypeError: can't convert Symbol into Integer 

不知道什麼索引是怎麼回事錯在這裏

+0

這是我在日誌中打印的真實數組。 – Ved 2011-04-16 06:17:07

+0

什麼是'source_array'?從你的例子來看,有兩種可能性。你需要明確說明。當你問,你應該說明你的變量是什麼。你想排序一個數組或哈希? – sawa 2011-04-16 06:23:53

+0

更新答案以包含所需的確切輸出。 – tokland 2011-04-16 07:26:04

回答

1

你輸入實際上是一對(名稱,[因此請確保您只對該對的第二個元素(書籍數組)排序:

[source_array[0], source_array[1].sort_by { |book| book[:price].to_i }] 
3

你試圖對兩個元素進行排序:

  • hash:亞馬遜,
  • 內部大陣。

因此,任何排序調用頂部數組將嘗試排序這兩個元素。

你到底想達到可以做到這樣:

a[1] = a[1].sort_by {|f| f[:price].to_i} 

編輯:一個更通用的方法:

# declare source array 
a = [:amazon, 
[{:price=>" 396 ", :author=>"Motwani", :name=>"Randomized Algorithms ", :url=>"", :source=>"amazon"}, 
{:price=>" 255 ", :author=>"Thomas H. Cormen", :name=>"Introduction To Algorithms ", :url=>"", :source=>"amazon"}]] 

# convert to hash for easier processing 
b = Hash[*a] 

# now sort former inner table by price 
b.merge!(b) {|k, v| v.sort_by {|p| p[:price].to_i}} 

# return to old representation 
b.to_a[0] 
=> [:amazon, [{:price=>" 255 ", :author=>"Thomas H. Cormen", :name=>"Introducti 
on To Algorithms ", :url=>"", :source=>"amazon"}, {:price=>" 396 ", :author=>"M 
otwani", :name=>"Randomized Algorithms ", :url=>"", :source=>"amazon"}]] 
相關問題