using System;
using System.Collections.Generic;
using Random = UnityEngine.Random;
public static class IListExtension
{
// 洗牌
public static void Shuffle<T>(this IList<T> list)
{
for (var i = list.Count - 1; i >= 0; --i)
{
var index = Random.Range(0, list.Count);
var temp = list[index];
list[index] = list[i];
list[i] = temp;
}
}
// 按权重选取
public static T SelectByWeight<T>(this IList<Tuple<int, T>> list)
{
var allWeight = 0;
foreach (var (weight, _) in list)
allWeight += weight;
if (allWeight == 0) return default;
var value = Random.Range(0, allWeight);
foreach (var (weight, item) in list)
{
if (value < weight)
return item;
value -= weight;
}
return default;
}
}
原文:https://www.cnblogs.com/Fallever/p/10583242.html