有没有更好的方法来计算红宝石中的滞后(值 - 前值)?这就是我提出的。如果滞后大于0,我返回1
,如果小于,我返回-1
(我的代码不起作用。使用ruby 2.3.5)
def lagChange(arr,k=1)
prev=nil
ret=[]
arr.each{|x|
if(x.to_i>-9999)
ret<<if(x-prev>0){1}else{-1}end
else
ret<<"NA"
end
prev=x.to_i
}
return ret
end
lagChange([1,2,3,5]) #NA 1 1 -1
答案 0 :(得分:5)
if(x-prev>0){1}else{-1}end
无效Ruby。
def lagChange(arr,k=1)
prev = nil
ret = []
arr.each{|x|
if prev == nil
ret << "NA"
elsif(x.to_i>-9999)
ret << (x-prev > 0 ? 1 : -1)
end
prev=x.to_i
}
return ret
end
lagChange([1,2,3,1])
=> ["NA", 1, 1, -1]
较短的版本可能是
def lag_change(arr)
arr.each_cons(2).map {|x,y| y-x > 0 ? 1 : -1}.unshift('NA')
end
> lag_change([1,2,3,1])
=> ["NA", 1, 1, -1]
答案 1 :(得分:4)
看起来太空船运营商可能派上用场了:
def lagChange(arr)
arr.map.with_index do |x, idx|
idx == 0 ? "NA" : x <=> arr[idx - 1]
end
end
lagChange([1,2,2,1])
=> ["NA", 1, 0, -1]
请注意,如果它们相等(无滞后),它也会返回0。