如何设置百分比,让它们看起来随意?
我理解如何使数组随机。这很容易。现在是困难的部分。 我想知道如何设置数组中每个项目的百分比,看起来该数组中的每个项目都以随机顺序显示。
你能为数组中的每个项目设置百分比吗?或者我们只有随机工作?
答案 0 :(得分:0)
为此,您必须将重量与每种可能性相关联。它不一定是百分比。
这是一个具有权重的通用项目的示例
public class WeightedItem<T>
{
public T Item { get; set; }
public int Weight { get; set; }
public WeightedItem(T item, int weight=1)
{
Item = item;
Weight = weight;
}
}
要选择随机所有项目之一,您只需提供权重较高的项目更好的机会
public static class WeightedRandomizer<T>
{
private static System.Random _random;
static WeightedRandomizer()
{
_random = new System.Random();
}
public static T PickRandom(List<WeightedItem<T>> items)
{
int totalWeight = items.Sum(item => item.Weight);
int randomValue = _random.Next(1, totalWeight);
int currentWeight = 0;
foreach (WeightedItem<T> item in items)
{
currentWeight += item.Weight;
if (currentWeight >= randomValue)
return item.Item;
}
return default(T);
}
}
例如:
var candidates = new List<WeightedItem<string>>
{
new WeightedItem<string>("Never", 0),
new WeightedItem<string>("Rarely", 2),
new WeightedItem<string>("Sometimes", 10),
new WeightedItem<string>("Very often", 50),
};
for (int i = 0; i < 100; i++)
{
Debug.WriteLine(WeightedRandomizer<string>.PickRandom(candidates));
}
这些项目的可能性是:
&#34;决不&#34; :0次中的62次(0%)
&#34;很少&#34; :62次中的2次(3.2%)
&#34;有时&#34; :62次中的10次(16.1%)
&#34;经常&#34 ;: 62次中的50次(80.6%)
您可以使用任何其他类型,例如图片,数字或您自己的类别,而不是字符串。