消除数组中的重复项(JSONiq)

时间:2013-10-27 13:48:13

标签: arrays json duplicates zorba jsoniq

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

多次使用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)()

这是一个测试工具:

答案 2 :(得分:0)

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

虽然Matthias的解决方案不适用于尝试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
]
$ 

赫尔曼。