我正在尝试使比率接近1,但似乎无法找到如何执行此操作……这是到目前为止的代码:
<testadvarden>
{for $i in 0 to 72
let $latitude := $i
let $iterad := (local:distance(data($latitude)))
return <lista latitud = "{$latitude}" ratio = "{$iterad}" /> }
</testadvarden>
我的函数距离仅返回比率。这些是最相关的返回值:
<testadvarden>
<lista latitud="26" ratio="1.210681245514598"/>
<lista latitud="27" ratio="1.1472684079724134"/>
<lista latitud="28" ratio="1.108013683878131"/>
<lista latitud="29" ratio="1.0367234044480529"/>
<lista latitud="30" ratio="0.9820439101177922"/>
<lista latitud="31" ratio="0.8714211421572755"/>
<lista latitud="32" ratio="0.7316921947582108"/>
</testadvarden>
所以我的问题是如何获得最接近1的比例的给定纬度。
答案 0 :(得分:2)
abs(1 - @ratio)
上的排序是否会给出最接近的排序?
您可以使用例如
进一步处理lista
元素
for $l in */lista
order by abs(1 - $l/@ratio) ascending
count $pos
where $pos = 1
return data($l/@latitud)
在https://xqueryfiddle.liberty-development.net/b4GWVa处返回30
。除了使用count/where
来标识已排序序列中的第一/最后一项外,您还可以使用head
:
head(
for $l in */lista
order by abs(1 - $l/@ratio) ascending
return $l
)/@latitud/data()
除了使用order by
进行排序外,在具有较高阶/内联函数的XQuery 3.1中,您还可以将sort
函数与例如
data(head(sort(lista, (), function($l) { abs(1 - $l/@ratio) }))/@latitud)
完整的样本应该是
declare context item := <testadvarden>
<lista latitud="26" ratio="1.210681245514598"/>
<lista latitud="27" ratio="1.1472684079724134"/>
<lista latitud="28" ratio="1.108013683878131"/>
<lista latitud="29" ratio="1.0367234044480529"/>
<lista latitud="30" ratio="0.9820439101177922"/>
<lista latitud="31" ratio="0.8714211421572755"/>
<lista latitud="32" ratio="0.7316921947582108"/>
</testadvarden>;
data(head(sort(lista, (), function($l) { abs(1 - $l/@ratio) }))/@latitud)