0

我有一个 C# 脚本,它从 20 位长的随机 BigInteger 中提取 5 位数字。然后将其转换为 0 到 99,999 之间的 int 值。我想使用这个数字来确定使用一组 113 个字符串的字符的名称。我无法弄清楚这一点的原因是因为我不希望 113 个字符串中的每一个都有相同的机会被选中,所以我不能只使用模运算符来获取集合的索引字符串。我希望映射不统一,以便某些名称比其他名称更稀有。例如,类似:

        if(val <= 1000)
        {
            name = names[0];
        }
        if(val > 1000 && val <= 1250)
        {
            name = names[1];
        }
        if(val > 1250 && val <= 1750)
        {
            name = names[2];
        }

有没有办法以有效的方式映射这样的非均匀范围,而无需明确输入 113 个不同的范围?

4

1 回答 1

0

您可以将其划分为 N > 113 的 N 个范围,并将多个值分配给您希望更常见的字符串。一种简单的方法是拥有一个字符串数组并为您想要最常见的字符串创建多个条目,然后使用数组长度的模数作为数组的索引。

var strings = new string[] 
{
    "Foo",
    "Foo",
    "Bar",
    "Baz"
};

int someNumber = 77777;
var index = someNumber % strings.Length;
var myString = strings[index];

当然,这种方法不能对任何给定字符串的机会进行细粒度控制(除非您创建一个包含 100,000 个条目的数组......)

于 2021-10-23T04:52:40.487 回答