int n = jv_array_length(jv_copy(objects));
struct sort_entry* entries = sort_items(objects, keys);
jv ret = jv_array();
- jv curr_key = entries[0].key;
- jv group = jv_array_append(jv_array(), entries[0].object);
- for (int i = 1; i < n; i++) {
- if (jv_equal(jv_copy(curr_key), jv_copy(entries[i].key))) {
- jv_free(entries[i].key);
- } else {
- jv_free(curr_key);
- curr_key = entries[i].key;
- ret = jv_array_append(ret, group);
- group = jv_array();
+ if (n > 0) {
+ jv curr_key = entries[0].key;
+ jv group = jv_array_append(jv_array(), entries[0].object);
+ for (int i = 1; i < n; i++) {
+ if (jv_equal(jv_copy(curr_key), jv_copy(entries[i].key))) {
+ jv_free(entries[i].key);
+ } else {
+ jv_free(curr_key);
+ curr_key = entries[i].key;
+ ret = jv_array_append(ret, group);
+ group = jv_array();
+ }
+ group = jv_array_append(group, entries[i].object);
}
- group = jv_array_append(group, entries[i].object);
+ jv_free(curr_key);
+ ret = jv_array_append(ret, group);
}
- jv_free(curr_key);
- ret = jv_array_append(ret, group);
jv_mem_free(entries);
return ret;
}
[1,2,5,3,5,3,1,3]
[1,2,3,5]
+unique
+[]
+[]
+
[min, max, min_by(.[1]), max_by(.[1]), min_by(.[2]), max_by(.[2])]
[[4,2,"a"],[3,1,"a"],[2,4,"a"],[1,3,"a"]]
[[1,3,"a"],[4,2,"a"],[3,1,"a"],[2,4,"a"],[4,2,"a"],[1,3,"a"]]