【Unity】Unity(C#)でリスト・配列の中身をランダムに並び替え、ランダムに要素を取得
リストの中身をランダムに並び替え、ランダムな要素を取得
Unity関係ありませんが、結構使うので。たまに役に立ちます
ちなみにこの辺の投稿を参考にしています。
[blogcard url="http://answers.unity3d.com/questions/486626/how-can-i-shuffle-alist.html"][/blogcard]
配列の中身を並び替え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public static T[] Shuffle(this T[] array) { var length = array.Length; var result = new T[length]; Array.Copy(array, result, length); var random = new System.Random(); int n = length; while (1 < n) { n--; int k = random.Next(n + 1); var tmp = result[k]; result[k] = result[n]; result[n] = tmp; } return result; } |
リストの中身を並び替え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public static List Fisher_Yates_CardDeck_Shuffle(List aList,int seed) { System.Random _random = new System.Random(seed); GameObject myGO; int n = aList.Count; for (int i = 0; i < n; i++) { int r = i + (int)(_random.NextDouble() * (n - i)); myGO = aList[r]; aList[r] = aList[i]; aList[i] = myGO; } return aList; } |
リストと配列の要素をランダムに取得
ついでに配列とリストの要素をランダムに取得するメソッドです。
配列の要素をランダムに取得
1 2 3 4 |
public static T GetRandom(this T[] self) { return self[UnityEngine.Random.Range(0, self.Length)]; } |
リストの要素をランダムに取得
1 2 3 4 |
public static T GetRandom(this IList self) { return self[UnityEngine.Random.Range(0, self.Count)]; } |