コード
using System.Collections.Generic;
public static class IListExtension
{
<summary>
</summary>
public static T GetRandom<T>(this IList<T> self)
{
if (self.Count <= 0)
return default;
return self[Random.Range(0, self.Count)];
}
<summary>
</summary>
public static void Shuffle<T>(this IList<T> self)
{
if (self == null || self.Count <= 1)
return;
for (var i = self.Count - 1; i > 0; i--)
{
var j = Random.Range(0, i);
var tmp = self[i];
self[i] = self[j];
self[j] = tmp;
}
}
}
サンプル
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
public class SampleEditorWindow : EditorWindow
{
private List<int> _list = new List<int>
{
1, 2, 3, 4, 5, 6, 7
};
private void OnGUI()
{
if (GUILayout.Button("Shuffle"))
{
_list.Shuffle();
Debug.Log("Shuffle:" + string.Join(", ", _list.Select(l => l.ToString())));
}
if (GUILayout.Button("Random"))
{
Debug.Log("Random:" + _list.GetRandom());
}
}
}