आप इस समस्या को बहुत अधिक अनिवार्य दृष्टिकोण से आ रहे हैं।
XQuery में आप चर के मान सेट कर सकते हैं, लेकिन आप उन्हें कभी नहीं बदल सकते हैं।
पुनरावृत्ति प्रकार एल्गोरिदम करने के लिए सही तरीका एक पुनरावर्ती समारोह के साथ है:
declare funciton local:most($sequence, $index, $value, $count)
{
let $current=$sequence[$index]
return
if (empty($current))
then $value
else
let $current-count = count(index-of($current, $sequence))
return
if ($current-count > $count)
then local:most($sequence, $index+1, $current, $current-count)
else local:most($sequence, $index+1, $value, $count)
}
लेकिन समस्या आ करने का बेहतर तरीका एक गैर पुनरावृत्ति तरह से समस्या का वर्णन कर रहा है। आपके अनुक्रम में सभी विशिष्ट मानों के इस मामले में आप वह व्यक्ति चाहते हैं जो किसी भी विशिष्ट मूल्य के अधिकतम संख्या में दिखाई देता है। ,
for $maxFreq in
max(for $val in distinct-values($sequence)
return count(index-of($sequence, $val))
)
return
distinct-values($sequence)[count(index-of($sequence, .)) eq $maxFreq]
अद्यतन दिसम्बर 2015:
पिछले sentance XQuery में अनुवाद किया
let $max-count := max(for $value1 in distinct-values($sequence)
return count(index-of($sequence, $value1)))
for $value2 in distinct-values($sequence)
where (count(index-of($sequence, $value2)) = $max-count
return $value2
स्रोत
2010-06-24 17:23:51
अच्छा सवाल फिर से (+1)। और जवाब एक XPath एक-लाइनर अभिव्यक्ति है ... इसे कम करने की कोशिश करेगा। –