/// <summary> /// 数组通过随机数,自动选择随机数字在数组中的位置 /// </summary> /// <param name="probArray"></param> /// <returns></returns> private static string Choose(float[] probArray) { float total = 0.0f; foreach (float item in probArray) { total += item; } double f_ramdow = ran.NextDouble() * total; for (int i = 0; i < probArray.Length; i++) { if (f_ramdow < probArray[i])//如果第一个数字在改区域说明就是第一个,如果不在减去该区域,下一个进行比较 return i + ">>" + probArray[i]; else f_ramdow -= probArray[i]; } return ""; }
调用侧测试端
for (int i = 0; i < 100; i++) { //表示数组里面第一个数的几率是 1%,第二个5%,第三50%,第四50%,第五80%…… Console.WriteLine(Choose(new[] { 0.01f, 0.05f, 0.5f, 0.5f, 0.8f, 0.8f, 0.8f, 0.8f, 0.8f })); }