我有一个数组,其格式为timestamp(由冒号分隔),lat,lng。我还有另一组时间戳。我试图比较数组并找到最接近的匹配,然后返回相应的lat和lng。
timestampArr=["3,18,9,24,34","2,27,7,22,49"]
gpsArr=["3:15:9:24:36,33.6789,78.8908","3:17:9:2:34,33.7,88.9"]
#output expected: ["33.7,88.9","33.6789,78.8908"]
#first timestamp in timestampArr matches 2nd timestamp in gpsArr so return that lat,lng
我的代码:
def closest_float(xs, value)
xs.min_by { |x| (x.to_f - value).abs }
end
def getGPSforTime(timeArr.gpsFilepath)
text=text.each_slice(7).to_a #5 for timestamp(sep ,) +lat+lng
gpsTimes=Array.new
finalArr=Array.new
text.each{|x|
timeSinceEpoch=Time.new('2014',x[0].to_i,x[1].to_i,x[2].to_i,x[3].to_i,x[4].to_i,"+09:00")
timeSinceEpoch=timeSinceEpoch.to_i
gpsTimes.push("#{timeSinceEpoch}")#ts(sep :)
}
timeArr.each{|x|
x=x.split(",")
timeSinceEpoch=Time.new('2014',x[0].to_i,x[1].to_i,x[2].to_i,x[3].to_i,x[4].to_i,"+09:00")
timeSinceEpoch=timeSinceEpoch.to_i
gpsClosestTime=closest_float(gpsTimes, timeSinceEpoch)
finalArr.push(text[gpsTimes.index(gpsClosestTime)][5],text[gpsTimes.index(gpsClosestTime)][6])
}
return finalArr
end
到目前为止,我的代码完全搞砸了(不工作)。有人可以提供一个比我尝试做的更简单的解决方案吗?
时间戳格式为:month:day:hour:minute:second。
答案 0 :(得分:0)
我必须对我的代码进行一些修改才能使它工作,主要是我获得子串的问题。这是我最终的解决方案:
def closest_int(xs, value)
return xs.min_by { |x|
(x.to_i - value.to_i).abs
}
end
def getGPSforTime(timeArr,gpsFilePath)
text=File.open(gpsFilePath).read
text=text.gsub ':',',' #to account for newer versions with colon
text=text.split(',')
text=text.each_slice(7).to_a #5 for timestamp(sep ,) +lat+lng
gpsTimes=Array.new
gps=Array.new
finalArr=Array.new
text.each{|x|
gpsTimes.push("#{x[0]}#{x[1]}#{x[2]}#{x[3]}#{x[4]}")#ts(sep :)
gps.push("#{x[5]},#{x[6]}")
}
timeArr.each{|x|
x=x.split(":")
time="#{x[0]}#{x[1]}#{x[2]}#{x[3]}#{x[4]}"
gpsClosestTime=closest_int(gpsTimes, time)
puts "#{time} closest to: #{gpsClosestTime}"
finalArr.push("#{text[gpsTimes.index(gpsClosestTime)][5]},#{text[gpsTimes.index(gpsClosestTime)][6]}")
}
return finalArr
end