自己写的,目前我在CSDN没有找到比这个更简单的写法,而且时间复杂度也是比较低,而且随机性比较强。代码简短,复制即用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public List<T> RandomList<T>(List<T> inList) {
List<T> newList = new List<T>();
int count = inList.Count;
for (int i = 0; i < count; i++)
{
int temp = UnityEngine.Random.Range(0, inList.Count - 1);
T tempT = inList[temp];
newList.Add(tempT);
inList.Remove(tempT);
}
//将最后一个元素再随机插入
T tempT2 = newList[newList.Count - 1];
newList.RemoveAt(newList.Count - 1);
newList.Insert(UnityEngine.Random.Range(0,newList.Count), tempT2);
inList = newList;
return inList;
}
使用方法
public void Test() {
List<int> testList = new List<int>();
testList.Add(2);
testList.Add(4);
testList.Add(6);
testList.Add(8);
testList.Add(10);
testList.Add(12);
testList = RandomList(testList);
//这个时候集合已经随机了
}