【问题标题】:Sorting hash in ruby在 ruby​​ 中对哈希进行排序
【发布时间】:2016-05-18 12:01:33
【问题描述】:

sorter.sort_by{|name, user_id| user_id} 不工作。即使哈希映射排序器已排序,它也会打印未排序的哈希。

我已在哈希映射中附加了名称和user_id 所需的条件:

require 'json'
class Numeric
    def to_rad
      self * Math::PI / 180
    end
  end

  def distance( lat2,  lon2)
     lat1=12.9611159
     lon1=77.6362214
     dLat = (lat2-lat1).to_rad;
     dLon = (lon2-lon1).to_rad;
     a = Math.sin(dLat/2) * Math.sin(dLat/2) +
         Math.cos(lat1.to_rad) * Math.cos(lat2.to_rad) *
         Math.sin(dLon/2) * Math.sin(dLon/2);
     c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
     d = 6371 * c;
    return d
  end

file= File.read('customers.json')
data_hash= JSON.parse(  file)
 sorter = Hash.new

data_hash["customers"].each do |user|
  latitude=user["latitude"].to_f
  longitude=user["longitude"].to_f
  $count=0
 if (distance(latitude,longitude).to_f < 100.00)
        name = user["name"]
        user_id=user["user_id"]

        sorter[name]=user_id
        # print name," ",user_id
        # print "\n"

  end
    # 

 end
 sorter.sort_by{|name, user_id| user_id}    

 print sorter 

【问题讨论】:

    标签: ruby-on-rails json sorting hash


    【解决方案1】:

    sort_by 返回排序后的数组,它不对数组进行原地排序。

    2.3.0 :001 > x = %w( aa aaa a )
     => ["aa", "aaa", "a"]
    2.3.0 :003 > x.sort_by { |w| w.size }
     => ["a", "aa", "aaa"]
    2.3.0 :004 > x
     => ["aa", "aaa", "a"]
    

    这意味着你要么写

    print sorter.sort_by{|name, user_id| user_id} 
    

    或者你必须将结果重新分配给sorter

    sorter = sorter.sort_by{|name, user_id| user_id} 
    print sorter
    

    【讨论】:

    • user_id 5 和 6 未排序
    • @carletti [[“乔治娜”,“10”],[“理查德”,“11”],[“克里斯”,“12”],[“迈克尔”,“15”] , ["Ian", "16"], ["David", "25"], ["Alan", "31"], ["Lisa", "39"], ["Nora", "5"] , ["Theresa", "6"]] 这是我得到的输出。您可以看到最后打印了 5 和 6 的 user_id
    • 因为您将 ID 存储为字符串,并且“10”排在“6”之前。如果您希望它们按整数(而不是字符串)排序,则必须将它们转换为整数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2014-03-05
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多