【问题标题】:Alternating (interleaving?) two XQuery For loops交替(交错?)两个 XQuery For 循环
【发布时间】:2016-08-16 17:20:26
【问题描述】:

如果 a=A,B,C 和 b=1,2,3 那么在 XQuery 中我可以有连续的循环,例如:

{for $x in a
return $x}

{for $y in b
return $y}

这将返回 A,B,C,1,2,3

或者我可以有这样的嵌套循环:

{for $x in a
return $x
    for $y in b
    return $y}}

这将返回 A1、A2、A3、B1、B2、B3、C1、C2、C3(或者反过来,但你知道我的意思)。

但是,我需要返回 A,1,B,2,C,3

我正在努力寻找一种方法来拥有两个循环,但在我的输出中交替它们的结果。有什么建议?我已经寻找解决方案,但我不是 XQuery 专家,我什至不确定我使用的术语是否正确。

【问题讨论】:

  • 序列ab 是否保证长度相同?如果是这样,您可以遍历一个并使用该循环中的位置来获取另一个序列中相同位置的值。

标签: loops xquery


【解决方案1】:

在 XQuery 3.0 中有 higher-order 函数 fn:for-each-pair($seq1, $seq2, $f) 将用户提供的函数应用于两个输入序列 $f($seq1[1], $seq2[1]), $f($seq1[2], $seq2[2]), ... 的第一个、第二个等项,直到其中一个序列已用尽。对于您的用例,您只需要序列连接:

fn:for-each-pair(('A', 'B', 'C'), (1, 2, 3), function($a, $b) { $a, $b })

【讨论】:

    【解决方案2】:

    可以使用第一个序列中迭代器的位置来获取第二个序列中相同位置的值:

    for $x at $pos in a
    let $y := b[$pos]
    return ($x, $y)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2012-01-18
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多