|
|
@ -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) -> |
|
|
|