]> granicus.if.org Git - jq/commitdiff
Add a `unique` function.
authorStephen Dolan <mu@netsoc.tcd.ie>
Mon, 3 Dec 2012 02:02:12 +0000 (02:02 +0000)
committerStephen Dolan <mu@netsoc.tcd.ie>
Mon, 3 Dec 2012 02:02:12 +0000 (02:02 +0000)
builtin.c
docs/content/3.manual/manual.yml
testdata

index 43cfe2678850b99444291d7c8055b4faee073504..a3c1f78b5f6a2f90462511e9fc0eeee0d2fc57ea 100644 (file)
--- a/builtin.c
+++ b/builtin.c
@@ -295,6 +295,7 @@ static const char* jq_builtins[] = {
   "def select(f): if f then . else empty end;",
   "def sort_by(f): _sort_by_impl(map([f]));",
   "def group_by(f): _group_by_impl(map([f]));",
+  "def unique: group_by(.) | map(.[0]);",
 };
 
 
index 0e16a4951a3e84630d368d035b007d524092651b..2e616e14cad1abbec124cad4478b59e519549ff0 100644 (file)
@@ -542,6 +542,18 @@ sections:
             input: '[{"foo":1, "bar":10}, {"foo":3, "bar":100}, {"foo":1, "bar":1}]'
             output: ['[[{"foo":1, "bar":10}, {"foo":1, "bar":1}], [{"foo":3, "bar":100}]]']
 
+      - title: `unique`
+        body: |
+          
+          The `unique` function takes as input an array and produces
+          an array of the same elements, in sorted order, with
+          duplicates removed.
+
+        examples:
+          - program: 'unique'
+            input: '[1,2,5,3,5,3,1,3]'
+            output: ['[1,2,3,5]']
+
       - title: `contains`
         body: |
 
index e08e6aa5e9d540966765177fc75d205be65edac1..cc8263b01acd87ec7108ccadcf4313a4c72e9a43 100644 (file)
--- a/testdata
+++ b/testdata
@@ -448,3 +448,7 @@ sort
 [{"a": 4, "b": 1, "c": 3}, {"a": 0, "b": 2, "c": 43}, {"a": 1, "b": 4, "c": 3}, {"a": 1, "b": 4, "c": 14}]
 [[{"a": 4, "b": 1, "c": 3}], [{"a": 0, "b": 2, "c": 43}], [{"a": 1, "b": 4, "c": 14}, {"a": 1, "b": 4, "c": 3}]]
 [[{"a": 1, "b": 4, "c": 14}, {"a": 0, "b": 2, "c": 43}], [{"a": 4, "b": 1, "c": 3}, {"a": 1, "b": 4, "c": 3}]]
+
+unique
+[1,2,5,3,5,3,1,3]
+[1,2,3,5]