|
|
@ -136,6 +136,60 @@ extract_member(1, List1, List2) -> |
|
|
|
extract_member(Nth, [R | List1], List2) -> |
|
|
|
extract_member(Nth - 1, List1, List2 ++ [R]). |
|
|
|
|
|
|
|
%% ---------------------------------------------------- |
|
|
|
%% @doc |
|
|
|
%% 打乱列表函数 |
|
|
|
%% @end |
|
|
|
%% ---------------------------------------------------- |
|
|
|
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]). |
|
|
|
|
|
|
|
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, [R | List2]). |
|
|
|
|
|
|
|
confuse_list1(List) -> |
|
|
|
TupleList = list_to_tuple(List), |
|
|
|
TupleSize = tuple_size(TupleList), |
|
|
|
confuse_list1(TupleSize, TupleSize, TupleList). |
|
|
|
|
|
|
|
confuse_list1(0, _TupleSize, TupleList) -> tuple_to_list(TupleList); |
|
|
|
confuse_list1(Index, TupleSize, TupleList) -> |
|
|
|
Index1 = rand:uniform(TupleSize), |
|
|
|
Index2 = rand:uniform(TupleSize), |
|
|
|
Value1 = element(Index1, TupleList), |
|
|
|
Value2 = element(Index2, TupleList), |
|
|
|
TupleList1 = setelement(Index1, TupleList, Value2), |
|
|
|
TupleList2 = setelement(Index2, TupleList1, Value1), |
|
|
|
confuse_list1(Index - 1, TupleSize, TupleList2). |
|
|
|
|
|
|
|
confuse_list2(List) -> |
|
|
|
Array = array:from_list(List), |
|
|
|
ArraySize = array:size(Array), |
|
|
|
confuse_list2(ArraySize, ArraySize, Array). |
|
|
|
|
|
|
|
confuse_list2(0, _TupleSize, TupleList) -> array:to_list(TupleList); |
|
|
|
confuse_list2(Index, TupleSize, TupleList) -> |
|
|
|
Index1 = rand:uniform(TupleSize), |
|
|
|
Index2 = rand:uniform(TupleSize), |
|
|
|
Value1 = array:get(Index1, TupleList), |
|
|
|
Value2 = array:get(Index2, TupleList), |
|
|
|
TupleList1 = array:set(Index1, Value2, TupleList), |
|
|
|
TupleList2 = array:set(Index2, Value1, TupleList1), |
|
|
|
confuse_list2(Index - 1, TupleSize, TupleList2). |
|
|
|
|
|
|
|
%%根数Tuple元素数量,把List转成Tuple 返回:{TupleList, RemainList} |
|
|
|
list_to_tuple(List, TupleCount) -> |
|
|
|
list_to_tuple(List, TupleCount, []). |
|
|
|