使用XQuery计算序列中的连续重复元素

Kaushik Bose

如果序列= [aabcccaddeeefghh]

然后输出= [1 2 1 1 2 3 1 1 2 1 2 3 1 1 1 2 2]

尝试使用递归但没有运气...请帮助..感谢您的期待

注意:使用XQuery实现1.0

我失败的实现之一如下:

declare function local:test($sequence,$count){

for $counter in (1 to count($sequence))

let $maxIndex := count($sequence)

return

if (matches(subsequence($sequence,1,$maxIndex)[$counter],subsequence($sequence,1,$maxIndex)[$counter + +1])) then let $count := $count + 1 return $count[last()]

else let $count := 1 return $count[last()]


};
Kaushik Bose

我有一个可行的解决方案来解决我的问题。积分:odie_63 @ http://odieweblog.wordpress.com/

declare namespace xf = "http://tempuri.org/OSBTestProject/Resources/XQuery/test/";

declare function local:sequence-group($seq as item()*) as item()*
{
   let $start-of-group :=
   fn:index-of(
     for $i in 1 to count($seq)
     let $prev := $seq[$i - 1]
     return if ($prev != $seq[$i] or not($prev)) then 1 else 0
   , 1
   )
   return
     for $i in 1 to count($seq)
     return $i - $start-of-group[. le $i][last()] + 1
};

declare function xf:test($test as xs:string) as xs:integer*
 {
let $test1 := tokenize($test, ',')
 return  local:sequence-group($test1)
};

declare variable $test as xs:string external;

xf:test($test)

输入:a,a,b,c,c,c,a,d,d,e,e,e,f,g,h,h

输出:1 2 1 1 2 3 1 1 2 1 2 3 1 1 1 2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章