2010-03-24 87 views

回答

1

一種選擇是迭代所有項目,只是在項目到達除數時才取項目,在這種情況下爲2.一個缺點是如果項目不是最後一組項目甚至是除數的倍數。例如,具有奇數個元素的序列的最後一個元素將不會以此方法返回。

for $item at $index in $items 
    return 
    if ($item mod 2 = 0) then 
    ($items[$index - 1], $items[$index]) 
    else 
    () 

另一種選擇是使用mod和項目的索引。使用這種方法,您可以確保將所有元素都包含在$ items序列中,方法是將小組中的項目數添加到計數中。

let $group-size := 2 

return 
for $index in (1 to fn:count($items)+($group-size - 1))[. mod $group-size = 0] 
    return 
    ($items[$index - 1] , $items[$index]) 
0
for $item at $index in $items 
return 
(
    if ($index mod 2 eq 0) then 
    (
     $items[xs:integer(xs:integer($index) - 1)], $items[xs:integer($index)] 
    ) 
    else 
    () 
) 
0
let $s := ("a","b","c","d","e","f") 

for $i in 1 to xs:integer(count($s) div 2) 
return 
<pair> 
    {($s[$i*2 - 1],$s[$i*2])} 
</pair> 

回報

<pair>a b</pair> 
<pair>c d</pair> 
<pair>e f</pair> 
2

的XQuery 3.0解決方案

對於此,更復雜的尋呼用例的Window Clause已經用XQuery 3.0中創建。但是,它還不被許多XQuery處理器支持。

窗口化例子

這裏,你可以在try.zorba執行例如工作示例:

for tumbling window $pair in (2, 4, 6, 8, 10, 12, 14) 
    start at $s when fn:true() 
    end at $e when $e - $s eq 1 
return <window>{ $pair }</window> 

結果

<window>2 4</window><window>6 8</window><window>10 12</window><window>14</window> 
+0

我喜歡它。我想我們最終可以使用它。它看起來也有不同類型的窗口。很高興知道。 – spig 2011-03-17 22:47:54