首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xquery-如何获取数值列表中连续值之间的差异

xquery-如何获取数值列表中连续值之间的差异
EN

Stack Overflow用户
提问于 2012-10-17 02:53:03
回答 2查看 627关注 0票数 1

我已经成功地在一个变量中提取了一个值,并在另一个变量中提取了一列值(作为XQuery表达式的一部分)。

现在,假设单值变量是

代码语言:javascript
运行
复制
x=1

列表变量被命名为y,其值为2,4,7,11,16

我想提取以下值-- (2-1)、(4-2)、(7-4)、(11-7)、(16-11)

即,列表变量的第一个值减去单值变量,然后列表变量的连续成员之间的差异。

我试着用

代码语言:javascript
运行
复制
for $pos in list-variable/position() 
-> if clause for $pos=1 (to subtract and shown list variable- single value variable)    
->else show difference b/w consecutive list variables... 

但是没有任何东西显示为输出...我在这里做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-17 04:36:05

I.使用XQuery 3.0 /XPath3.0,使用

代码语言:javascript
运行
复制
let $pVal := 1,
    $vList := (2,4,7,11,16),
    $vList2 := ($pVal, subsequence($vList, 1, count($vList)-1))
 return
    map-pairs(function($m as xs:integer, $n as xs:integer) as xs:integer
                {
                 $m - $n
                },
                $vList,
                $vList2
              )

这将生成所需的正确结果

代码语言:javascript
运行
复制
1 2 3 4 5

II. XQuery 1.0解决方案

代码语言:javascript
运行
复制
let $pVal := 1,
    $vList := (2,4,7,11,16),
    $vList2 := ($pVal, subsequence($vList, 1, count($vList)-1))
 return
    for $i in 1 to count($vList)
     return
        $vList[$i] - $vList2[$i]

再次生成相同的正确结果

代码语言:javascript
运行
复制
1 2 3 4 5

性能比较

令人惊讶的是,当在BaseX上运行时,XPath ( XQuery ) 3.0查询的执行速度几乎是XQuery 1.0查询的两倍。

票数 2
EN

Stack Overflow用户

发布于 2012-10-17 04:35:16

你的例子太抽象了,真的不清楚你想用什么。

但您可以像这样减去$x或前一个元素:

代码语言:javascript
运行
复制
 let $x := 1, $seq := (2,4,7,11,16)  
 for $temp at $pos in $seq 
 return $seq[$pos] - if ($pos eq 1) then $x else $seq[$pos - 1]

如果你想要这个职位,记得用'at $pos‘。

(顺便说一句,XQuery 3也有针对这种情况的window子句:

可能看起来像这样:

代码语言:javascript
运行
复制
 let $x := 1, $seq := (2,4,7,11,16) 
 for sliding window $w in ($x, $seq)
     start at $s when fn:true()
     only end at $e when $e - $s eq 1
 return $w[2] - $w[1]

看起来并不容易,但它更酷)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12921541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档