0
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
user_idは5と6に結果を再度割り当てる必要があり –
@carletti [[」 10 "]、[リチャード]、[11]、[クリス、12]、[マイケル]、[15]、[イアン]、[16] 「David」、「25」、「Alan」、「31」、「Lisa」、「39」、「Nora」、「5」、「Theresa」、「6」]これは私が得ている出力。 5と6のuser_idが最後に –
と表示されているのを見ることができます。あなたはIDとして文字列を格納していて、 "10"は "6"の前にソートされています。それらをInteger(文字列ではなく)としてソートする場合は、Integerに変換する必要があります。 –