Синтаксис массивов в ruby - PullRequest
       37

Синтаксис массивов в ruby

0 голосов
/ 25 августа 2011

Это очень простой вопрос, но у меня возникли проблемы с пониманием метода сортировки хэшей Rubys.

По сути, я получаю не могу преобразовать строку в целое число, поэтому мое первое предположение заключается в том, что я сортирую массив по строке (которая на самом деле является числом). Массив содержит хэши, и я пытаюсь отсортировать их по одному из значений хэшей, которые я идентифицировал с помощью ключа.

Вот как я сортирую свой массив:

@receivedArray =(params[:respElementDatas])

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

Ошибка, которую я получаю, не может преобразовать строку в целое число в строке сортировки.

Естественно, я предположил, что

Просто быстрый вопрос. Прав ли я, говоря, что «ed» - это объект, который хранится в массиве, и я правильно на него ссылаюсь? Также есть указания на то, как это исправить?

Ответы [ 4 ]

0 голосов
/ 26 августа 2011

Ваш @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 голосов
/ 26 августа 2011

Вы правы, говоря, что 'ed' - это объект, который хранится в массиве. Если все элементы в массиве являются хешами, то вы ссылаетесь на него правильно?

Некоторые из хэшей имеют строку, а другие - целое число для element_type_id.

Я бы проверил, где вы смешиваете данные для element_type_id.

Вы можете попробовать ed["element_type_id"].to_i, что для целого числа не будет иметь никакого эффекта, но для строки разберет его в целое число.

0 голосов
/ 26 августа 2011

Похоже, ваша ошибка говорит о том, что ed это Array, а не Hash.Это может быть массив пар: [['key1', 'value1'], ['key2', 'value2']], и в этом случае вы захотите изменить код на:

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

Как предложил rubyprince, просмотр вывода p @receivedArray поможет прояснить это.

0 голосов
/ 25 августа 2011

попробуй ed["element_type_id"].to_i

...