From 27208f5ce88af0d27fad4370bab594744ed639b6 Mon Sep 17 00:00:00 2001 From: SisMaker <156736github> Date: Fri, 20 May 2022 00:18:02 +0800 Subject: [PATCH] =?UTF-8?q?ft:=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/template/utMapsFold.erl | 49 ++++++++++++++++++++++++++++++++++++- src/testCase/utTestMap.erl | 9 +++++++ src/testCase/utTestTime.erl | 5 +++- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/template/utMapsFold.erl b/src/template/utMapsFold.erl index 989b327..58848bf 100644 --- a/src/template/utMapsFold.erl +++ b/src/template/utMapsFold.erl @@ -1,6 +1,6 @@ -module(utMapsFold). --export([fold/1]). +-export([fold/1, diff/2, diffKeys/2]). fold(Map) -> fold(maps:iterator(Map), []). @@ -12,3 +12,50 @@ fold(Iterator, AccList) -> none -> AccList end. + + +diff(Map1, Map2) -> + case map_size(Map1) =< map_size(Map2) of + true -> + diff_1(maps:next(maps:iterator(Map1)), Map1, Map2); + _ -> + diff_2(maps:next(maps:iterator(Map2)), Map1) + end. + +diff_1(none, Map1, _Map2) -> + Map1; +diff_1({Key, _Value, NextIter}, Map1, Map2) -> + case maps:is_key(Key, Map2) of + true -> + diff_1(maps:next(NextIter), maps:remove(Key, Map1), Map2); + _ -> + diff_1(maps:next(NextIter), Map1, Map2) + end. + +diff_2(none, Map1) -> + Map1; +diff_2({Key, _Value, NextIter}, Map1) -> + diff_2(maps:next(NextIter), maps:remove(Key, Map1)). + +diffKeys(Map1, Map2) -> + case map_size(Map1) =< map_size(Map2) of + true -> + diffKeys_1(maps:next(maps:iterator(Map1)), Map2, []); + _ -> + diffKeys_2(maps:next(maps:iterator(Map2)), Map1) + end. + +diffKeys_1(none, _Map2, Acc) -> + Acc; +diffKeys_1({Key, _Value, NextIter}, Map2, Acc) -> + case maps:is_key(Key, Map2) of + true -> + diffKeys_1(maps:next(NextIter), Map2, Acc); + _ -> + diffKeys_1(maps:next(NextIter), Map2, [Key | Acc]) + end. + +diffKeys_2(none, Map1) -> + maps:to_list(Map1); +diffKeys_2({Key, _Value, NextIter}, Map1) -> + diffKeys_2(maps:next(NextIter), maps:remove(Key, Map1)). diff --git a/src/testCase/utTestMap.erl b/src/testCase/utTestMap.erl index 0ee2b15..6f1156b 100644 --- a/src/testCase/utTestMap.erl +++ b/src/testCase/utTestMap.erl @@ -47,3 +47,12 @@ tt3(N, Map) -> not_found end, tt3(N - 1, Map). + +ll(A, B) -> + A -- B. + +mm(A, B) -> + utMapsFold:diff(A, B). + + + diff --git a/src/testCase/utTestTime.erl b/src/testCase/utTestTime.erl index d7a4d46..11b5ad7 100644 --- a/src/testCase/utTestTime.erl +++ b/src/testCase/utTestTime.erl @@ -27,7 +27,10 @@ tt2(N, Sec, Fun) -> %% 经过测试 ls1 和 sl1 效率最高 %%%%%%%%%%%%%%%%% datetime 和 timestamp 互相转换 测试对比函数 start %%%%%%%%%%%%%%%%%%% ls1(LocalDate) -> - erlang:universaltime_to_posixtime(erlang:localtime_to_universaltime(LocalDate)). + erlang:universaltime_to_posixtime(LocalDate). + +ls12(LocalDate) -> + erlang:localtime_to_universaltime(LocalDate). %% 此方法很准