Browse Source

ft: confuseList

master
SisMaker 5 months ago
parent
commit
e4423b5618
1 changed files with 11 additions and 51 deletions
  1. +11
    -51
      src/comMisc/utList.erl

+ 11
- 51
src/comMisc/utList.erl View File

@ -108,75 +108,35 @@ getRandFromList(Num, List) ->
List -- Result.
%% List =[] List2
confuseList(List) ->
confuseList(List, []).
confuseList(List, Result) ->
confuseList(List, rand:uniform_s(1, length(List)), Result).
confuseList(_List, 0, Result) ->
Result;
confuseList(List, Nth, Result) ->
{NthData, Remain} = extract_member(rand:uniform_s(1, Nth), List),
confuseList(Remain, length(Remain), [NthData | Result]).
%%Nth个元素{NthData, RemainList}
extract_member(Nth, List) ->
extract_member(Nth, List, []).
extract_member(1, List1, List2) ->
case List1 of
[R] ->
{R, List2};
[R | L] ->
{R, List2 ++ L}
end;
extract_member(Nth, [R | List1], List2) ->
extract_member(Nth - 1, List1, List2 ++ [R]).
%% ----------------------------------------------------
%% @doc
%%
%% @end
%% List =[] List2 300 使confuseList 300使confuseList2
%% ----------------------------------------------------
confuse_list(List) ->
confuse_list(List, length(List), []).
confuse_list([], _Cnt, Result) -> Result;
confuse_list(List, Cnt, Result) ->
Index = rand:uniform(Cnt),
{Element, NList} = extract_member(Index, List, []),
confuse_list(NList, Cnt - 1, [Element | Result]).
confuse_list1(List) ->
confuseList(List) ->
TupleList = list_to_tuple(List),
TupleSize = tuple_size(TupleList),
confuse_list1(TupleSize, TupleSize, TupleList).
confuseList(TupleSize, TupleSize, TupleList).
confuse_list1(0, _TupleSize, TupleList) -> tuple_to_list(TupleList);
confuse_list1(Index, TupleSize, TupleList) ->
confuseList(0, _TupleSize, TupleList) -> tuple_to_list(TupleList);
confuseList(Index, TupleSize, TupleList) ->
ChangeIndex = rand:uniform(TupleSize),
Value1 = element(Index, TupleList),
Value2 = element(ChangeIndex, TupleList),
TupleList1 = setelement(Index, TupleList, Value2),
TupleList2 = setelement(ChangeIndex, TupleList1, Value1),
confuse_list1(Index - 1, TupleSize, TupleList2).
confuseList(Index - 1, TupleSize, TupleList2).
confuse_list2(List) ->
confuseList2(List) ->
Array = array:from_list(List),
ArraySize = array:size(Array),
confuse_list2(ArraySize, ArraySize, Array).
confuseList2(ArraySize, ArraySize, Array).
confuse_list2(0, _TupleSize, TupleList) -> array:to_list(TupleList);
confuse_list2(Index, TupleSize, TupleList) ->
confuseList2(0, _TupleSize, TupleList) -> array:to_list(TupleList);
confuseList2(Index, TupleSize, TupleList) ->
ChangeIndex = rand:uniform(TupleSize),
Value1 = array:get(Index, TupleList),
Value2 = array:get(ChangeIndex, TupleList),
TupleList1 = array:set(Index, Value2, TupleList),
TupleList2 = array:set(ChangeIndex, Value1, TupleList1),
confuse_list2(Index - 1, TupleSize, TupleList2).
confuseList2(Index - 1, TupleSize, TupleList2).
%%Tuple元素数量List转成Tuple {TupleList, RemainList}
list_to_tuple(List, TupleCount) ->

Loading…
Cancel
Save