【问题标题】:How to convert random text into an integer如何将随机文本转换为整数
【发布时间】:2019-10-08 18:07:42
【问题描述】:

我有不同的矩形对象,每个对象都有一个通过 Guid 生成的唯一 ID。

示例 ID:“fdd4551f-0087-48ee-b764-3713b5107ac9”

我想将该字符串转换为 0 到 256 之间的整数,这样我就可以根据每个对象的 ID 为每个对象分配随机颜色。

预期结果示例:

对于

"fdd4551f-0087-48ee-b764-3713b5107ac9" = 186

"48d32306-2861-4e78-b57e-9a02ce92f8ed"  = 35 

我并不关心数字是什么,只是我总是用相同的随机字符串得到相同的结果。

【问题讨论】:

  • 您可以为两个不同的字符串获取相同的数字吗?
  • 当然,我想这是不可避免的,因为结果池只有 256 个数字。
  • 我认为您的要求需要更加充实。此解决方案符合您当前的要求,但我怀疑您的想法是:int GetNumber(string intput) { return 6; /* chosen by fair die roll */ }
  • 我想如果我可以使用字符串作为随机种子,问题就会解决,但它只有整数输入
  • 使用 GetHashCode() 并将结果转换为 4 个字节,然后将它们异或在一起。

标签: c# string type-conversion integer guid


【解决方案1】:

考虑到相对宽松的要求,这可以是一个单行:

static int GetNumberForString(string guid, int limit)
{
    return Math.Abs(guid.GetHashCode()) % limit;
}

【讨论】:

  • 不能保证 Guid.GetHashCode() 将在 .NET 的不同实现之间返回相同的值。不确定这是否与 OP 有关。
  • 如果稳定的哈希码很重要,请查看此stackoverflow.com/questions/263400/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
相关资源
最近更新 更多