Bạn đang tiếp cận vấn đề này từ quá nhiều quan điểm bắt buộc.
Trong XQuery bạn có thể đặt giá trị của biến, nhưng bạn không bao giờ có thể thay đổi chúng.
Cách đúng để làm thuật toán lặp đi lặp lại kiểu là với một hàm đệ quy:
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)
}
nhưng một cách tốt hơn để tiếp cận vấn đề là bằng cách mô tả vấn đề theo một cách không lặp đi lặp lại. Trong trường hợp này của tất cả các giá trị khác nhau trong chuỗi của bạn, bạn muốn giá trị xuất hiện số lần tối đa của bất kỳ giá trị khác biệt nào.
Các sentance trước dịch sang XQuery là
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
Nguồn
2010-06-24 17:23:51
Câu hỏi hay (+1). Và câu trả lời là biểu thức một lớp của XPath ... sẽ cố gắng làm cho nó ngắn hơn. –