Random Marklogic:如何从序列中随机返回一组项目(随机样本)?
让我们假设我们有一个序列Random Marklogic:如何从序列中随机返回一组项目(随机样本)?,random,xquery,sequence,marklogic,Random,Xquery,Sequence,Marklogic,让我们假设我们有一个序列s:=('a','b','c','d','e')。我想返回一个随机样本,由这个序列中的三个项目组成。在Marklogic中如何做到这一点? 注意:我使用的序列就是一个例子。我处理的是大序列。一种可能的方法是使用递归函数重复提取单个值 declare function local:draw-n($sequence, $n) { if ($n > 0) then let $index := 1 + xdmp:random(count($sequence)
s:=('a','b','c','d','e')
。我想返回一个随机样本,由这个序列中的三个项目组成。在Marklogic中如何做到这一点?
注意:我使用的序列就是一个例子。我处理的是大序列。一种可能的方法是使用递归函数重复提取单个值
declare function local:draw-n($sequence, $n) {
if ($n > 0)
then
let $index := 1 + xdmp:random(count($sequence))
return ($sequence[$index], local:draw-n($sequence[
position() < $index or position() > $index
], $n - 1))
else
()
};
local:draw-n(('a','b','c','d','e'), 3)
declare function local:n-different-random-values($values, $n, $max) {
if (count($values) eq $n)
then $values
else
let $values := ($values, 1 + xdmp:random(count($sequence)))
return local:n-different-random-values(distinct-values($values), $n, $max)
};
let $sequence := ('a','b','c','d','e')
let $indexes := local:n-different-random-values((), 3, count($sequence))
return $sequence[position() = $indexes]
因为我处理的是大序列,所以第二种方法对我有效。