yaz/commit

sort by sum of values

authorMichiel Hildebrand
Mon Apr 23 15:05:18 2012 +0200
committerMichiel Hildebrand
Mon Apr 23 15:05:18 2012 +0200
commit190ac89ac61c11322fb010c68074dbd4d2418398
treea93e14147c446390bffde6cafa94003266dd9b5d
parente20d090dd3eca447281adabf33549eb3c3139da6
Diff style: patch stat
diff --git a/lib/yaz_util.pl b/lib/yaz_util.pl
index 2db5f87..9c52ef4 100644
--- a/lib/yaz_util.pl
+++ b/lib/yaz_util.pl
@@ -3,6 +3,7 @@
 	    list_offset/3,
 	    list_limit/4,
 	    pairs_sort_by_value_count/2,
+	    pairs_sort_by_value_sum/2,
 	    arg_key/3,
 	    sort_by_arg/3,
 	    sort_by_arg/4,
@@ -114,6 +115,25 @@ pairs_value_count([Key-Values|T], [Count-Key|Rest]) :-
 	length(Values, Count),
 	pairs_value_count(T, Rest).
 
+%%	pairs_sort_by_value_sum(+Pairs:key-list,
+%%	-Sorted:listcount-key)
+%
+%	Sorted is a list with the keys of Pairs sorted by the sum
+%	of the elements in value list.
+
+pairs_sort_by_value_sum(Grouped, Sorted) :-
+	pairs_value_sum(Grouped, Counted),
+	keysort(Counted, Sorted0),
+	reverse(Sorted0, Sorted).
+
+pairs_value_sum([], []).
+pairs_value_sum([Key-Values|T], [Count-Key|Rest]) :-
+	sumlist(Values, Sum),
+	length(Values, Length),
+	Count is Sum/Length,
+	pairs_value_sum(T, Rest).
+
+
 
 %%	sort_by_arg(+ListOfTerms, +Arg, -SortedList)
 %