2017-01-17 9 views
1

Ruby 2.4を使用しています。その配列に格納されているオブジェクトの特定のフィールドに基づいて配列をソートするのが難しいです。私は、ソートベースにはどうすればよいRubyの配列をソートしようとすると「NoMethodError」を取得する

a time: 16968700 b time: 21784000 
NoMethodError: undefined method `>' for true:TrueClass 
    from /Users/davea/Documents/workspace/myproject/app/services/text_table_to_race_time_converter_service.rb:668:in `sort' 
    from /Users/davea/Documents/workspace/myproject/app/services/text_table_to_race_time_converter_service.rb:668:in `populate_overall_rank_info' 
    from /Users/davea/Documents/workspace/myproject/app/services/text_table_to_race_time_converter_service.rb:408:in `get_data_hash' 
    from /Users/davea/Documents/workspace/myproject/app/services/text_table_to_race_time_converter_service.rb:25:in `get_race_times' 
    from /Users/davea/Documents/workspace/myproject/app/services/active_com_service.rb:57:in `process_page_data' 
    from /Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:88:in `process_race_data' 
    from (irb):2 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

...私は

results.sort! { |a,b| 
     puts "a time: #{a.time_in_ms} b time: #{b.time_in_ms}" 
     a.time_in_ms < b.time_in_ms 
    } 

を持っていると私は両方のフィールドが私のレールコンソールの整数であることを確認したが、私はこのコードを実行すると、私は「」エラーが出ます私のオブジェクトのフィールドに?

答えて

1

を試しますブール値ブロックがブール値を返すため、このエラーが発生します。 riドキュメント

から引用

は自分<=>方法に従って、又は供給ブロックの結果を使用することによってのいずれかで、ソート列挙内の項目を含む配列を返します。ブロックは、aとbの比較によって、-1,0、または+1を返す必要があります。

1

sort方法は、ブロックではなく整数値を返すことを期待

results.sort { |a, b| a.time_in_ms <=> b.time_in_ms } 

長形でこれらの

results.sort_by(&:time_in_ms) 

のいずれかを試してみてくださいこの

results.sort_by! { |element| element.time_in_ms } 
関連する問題