1. 洗牌算法(Fisher-Yates)
public static class ListExtensions
{
private static readonly System.Random Rng = new System.Random();
/// <summary>
/// 随机打乱指定列表中的元素顺序
/// </summary>
/// <typeparam name="T">列表元素的类型</typeparam>
/// <param name="list">要打乱顺序的列表</param>
public static void Shuffle<T>(this IList<T> list)
{
int listCount = list.Count;
while (listCount > 1)
{
listCount--;
int randomIndex = Rng.Next(listCount + 1);
T value = list[randomIndex];
list[randomIndex] = list[listCount];
list[listCount] = value;
}
}
}
示例代码
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
Debug.Log("Original list: " + string.Join(", ", numbers));
numbers.Shuffle();
Debug.Log("Shuffled list: " + string.Join(", ", numbers));
2. 添加数据并获取List Count
public static void AddAndCountListener<T>(this IList<T> list,T data, Action<int> countCallback)
{
list.Add(data);
int listCount = list.Count;
countCallback?.Invoke(listCount);
}
示例代码
numbers.AddAndCountListener(1, (count) =>
{
Debug.Log($"count:{count}");
});