diff options
author | Adam Kocoloski <kocolosk@apache.org> | 2010-06-16 16:49:36 +0000 |
---|---|---|
committer | Adam Kocoloski <kocolosk@apache.org> | 2010-06-16 16:49:36 +0000 |
commit | 78017574afd5796316a9f68cfc7f369e125fa36c (patch) | |
tree | 49cd3bbc3ff373625962ed5cd9469a51475ecb54 /src/couchdb/couch_util.erl | |
parent | 4ccf61a343c2437fb574bf00e4e3da5e48e17548 (diff) |
small optimization for reordering result lists
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@955297 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_util.erl')
-rw-r--r-- | src/couchdb/couch_util.erl | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/couchdb/couch_util.erl b/src/couchdb/couch_util.erl index 881ea2fb..b334c961 100644 --- a/src/couchdb/couch_util.erl +++ b/src/couchdb/couch_util.erl @@ -25,6 +25,7 @@ -export([compressible_att_type/1]). -export([get_value/2, get_value/3]). -export([md5/1, md5_init/0, md5_update/2, md5_final/1]). +-export([reorder_results/2]). -include("couch_db.hrl"). -include_lib("kernel/include/file.hrl"). @@ -430,3 +431,10 @@ md5_update(Ctx, D) -> -spec md5_final(Context::binary()) -> Digest::binary(). md5_final(Ctx) -> try crypto:md5_final(Ctx) catch error:_ -> erlang:md5_final(Ctx) end. + +% linear search is faster for small lists, length() is 0.5 ms for 100k list +reorder_results(Keys, SortedResults) when length(Keys) < 100 -> + [couch_util:get_value(Key, SortedResults) || Key <- Keys]; +reorder_results(Keys, SortedResults) -> + KeyDict = dict:from_list(SortedResults), + [dict:fetch(Key, KeyDict) || Key <- Keys]. |