using System;
using System.Collections.Generic;
using Random = UnityEngine.Random;
public static class IListExtension
{
// 洗牌
public static void Shuffle(this IList 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(this IList> 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;
}
// 集合的子集
public List> Subsets(this IList set)
{
int n = set.Count, pn = 1 << n;
List> result = new List>();
for (int pm = 0; pm < pn; pm++)
{
List temp = new List();
for (int k = 0; k < n; k++)
{
if (((1 << k) & pm) != 0)
temp.Add(set[k]);
}
result.Add(temp);
}
return result;
}
}