【问题标题】:Eliminate duplicates in array (JSONiq)消除数组中的重复项 (JSONiq)
【发布时间】:2013-10-27 13:48:13
【问题描述】:

我想删除 JSONiq 数组中的重复项。

let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]

如何消除 $x 中的重复项?

【问题讨论】:

    标签: arrays json duplicates zorba jsoniq


    【解决方案1】:
    let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]
    return [ distinct-values($x[]) ]
    

    【讨论】:

      【解决方案2】:

      多次使用replace function

      replace($x, "([1-5])(.*)\1", "$1")
      

      这是一个功能齐全的 JavaScript 等价物:

      [1,2,4,3,3,1,2,5].toString().replace(/([1-5]),(\1)/g, "$1").replace(/(,[1-5])(.*)(\1)/g,"$1$2").replace(/([1-5])(.*)(,\1)/g,"$1$2")
      

      这是一个通过 JSON.parse() 方法实现的通用 JavaScript 等价物,它会自动删除重复项:

      var foo = [1,2,4,3,3,1,2,5];
      
      var bar = "{" + foo.toString() + "}"
      
      var baz = bar.replace(/(\d)(.)/g , '\u0022$01\u0022:\u0022\u0022$02')
      
      var bop = JSON.parse(baz)
      
      var buz = JSON.stringify(bop).replace("{","[").replace("}","]").replace(/:""/g,"")
      
      var result = Function("return" + buz)()
      

      这是一个测试工具:

      【讨论】:

        【解决方案3】:

        regexp:replace 绝对不是解决这个问题的方法。

        虽然 Matthias 的解决方案不适用于 Try Zorba,但 this script 可以:

        let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]
        return [ distinct-values( jn:members($x) ) ]
        

        它返回(在上面的链接上试用):

        [ 1, 2, 3, 4, 5 ]
        

        DataPower Gateways JSONiq 处理器的脚本需要更详细一些。在那里你可以免费获得漂亮的打印结果:

        $ cat dv.xq 
        declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
        
        declare option output:method "json";
        declare option jsoniq-version "0.4.42";
        
        [ distinct-values( jn:members(.) ) ]
        $ 
        $ coproc2 dv.xq <(echo '[1, 2, 4 ,3, 3, 3, 1, 2, 5]') http://dp1-l3:2226; echo
        
        [
          1,
          2,
          4,
          3,
          5
        ]
        $ 
        

        赫尔曼。

        【讨论】:

          猜你喜欢
          • 2019-04-08
          • 2015-06-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多