मैं Redis 2.8 के भीतर सॉर्ट किए गए सेट (http://redis.io/commands/#sorted_set) से औसत की गणना करने के लिए एक साधारण लुआ स्क्रिप्ट लिख रहा हूं। स्क्रिप्टएक लूआ स्ट्रिंग को फ्लोट करने के लिए
नीचेlocal cnt = redis.call("ZCARD", KEYS[1])
if cnt > 0 then
if cnt%2 > 0 then
local mid = math.floor(cnt/2)
return redis.call("ZRANGE", KEYS[1], mid, mid)
else
local mid = math.floor(cnt/2)
local vals = redis.call("ZRANGE", KEYS[1], mid-1, mid)
return (tonumber(vals[1]) + tonumber(vals[2]))/2.0
end
else
return nil
end
समस्या, स्क्रिप्ट हमेशा एक पूर्णांक देता है जब परिणाम एक नाव होना चाहिए। परिणाम गलत है।
$ redis-cli zrange floats 0 100
1) "1.1"
2) "2.1"
3) "3.1"
4) "3.4975"
5) "42.63"
6) "4.1"
$ redis-cli EVAL "$(cat median.lua)" 1 floats
(integer) 3
सही परिणाम होना चाहिए (3,1 + 3,4975) /2.0 == 3,298
धन्यवाद! "तो हम हमेशा लूआ संख्याओं को पूर्णांक उत्तरों में परिवर्तित करते हैं, संख्या के दशमलव भाग को हटाते हैं" - क्या इसके लिए कोई कारण है, पूरी तरह से सहज ज्ञान युक्त लगता है। – Adil
मुझे लगता है कि पूर्णांक लाल रंग में फ्लोट्स की तुलना में अधिक आम उपयोग केस हैं। – Azmisov