如果序列= [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()]
};
我有一个可行的解决方案来解决我的问题。积分: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] 删除。
我来说两句