【发布时间】:2020-03-05 21:48:28
【问题描述】:
我想在给定一个唯一字符串时生成一个短整数。请注意,字符串的长度永远不会超过 3 个字符,只有字母字符,可以是大写或小写。例如,AB 不应返回与BA 相同的值。我尝试了类似以下(如下)的方法,但遇到BA 等于AK:
public static class StringExtensions
{
public static int StringToASCIIValue(this string str)
{
if (string.IsNullOrWhiteSpace(str))
throw new ArgumentException("string must not be null or whitespace");
int result = 0;
foreach (char singleChar in str)
{
result = 10 * result + singleChar - '0';
}
return result;
}
}
【问题讨论】:
-
为什么要避开
GetHashCode? -
我并没有真正看到尝试限制您从中获得的整数的好处。
int占用int的空间,无论它来自GethashCode还是使用“较小”的数字计算。 -
最简单的方法是将每个字符转换为它的 ascii 值,然后将两者连接成一个整数。然后
AB = 6566、BA = 6665、AK = 6575等。没有两个组合会是相同的 -
@TheBatman 的方法非常好,但要知道,如果您决定需要能够转换回来,您将需要一些额外的逻辑(例如,
11165是否应该转换回来到111和65或11和165?显然只有第一个在您的特定情况下有效)。 -
@BrootsWaymb 我需要事先知道这些数字才能进行枚举。
标签: c# string type-conversion