这对你有用:
class Program
{
private static List<KeyValuePair<string, int>> Actions = new List<KeyValuePair<string, int>>()
{
new KeyValuePair<string, int>("fishing", 25),
new KeyValuePair<string, int>("sleeping", 25),
new KeyValuePair<string, int>("drinking", 5),
new KeyValuePair<string, int>("running", 0),
};
static void Main(string[] args)
{
var result = Actions.OrderByDescending(r => r.Value).First();
Console.WriteLine(result.Key);
}
}
这假设您已经拥有这些操作及其百分比。现在,如果任何 2 个(或更多)项目具有相同的百分比,它将显示添加到列表中的第一个。
编辑
很抱歉没有得到随机化的要求。试试这个:
var listOfActionsToTake = new List<string>() { "fishing", "sleeping", "drinking", "running" };
var listOFActions = new List<KeyValuePair<string, int>>();
var rand = new Random();
var currentPercentage = 101;
for (int i = 0; i < listOfActionsToTake.Count; i++)
{
var current = rand.Next(currentPercentage);
if (i == listOfActionsToTake.Count - 1)
{
current = currentPercentage - 1;
}
listOFActions.Add(new KeyValuePair<string, int>(listOfActionsToTake[i], current));
currentPercentage -= current;
}
foreach (var action in listOFActions)
{
Console.WriteLine($"{action.Key}: {action.Value}");
}
var result = listOFActions.OrderByDescending(r => r.Value).First();
Console.WriteLine(result.Key);
这样,无论您向listOfActionsToTake 添加多少个值,它们之间的总和始终为 100,并且将选择最大的值