我真的不喜欢GetHashCode
选项以此为版本间隔会比哈希间隔
string Version1023 = "Version 1.0.2.3";
string Version1024 = "Version 1.0.2.4";
string Version1033 = "Version 1.0.3.3";
string Version1034 = "Version 1.0.3.4";
Console.WriteLine(Version1023 + " => " + Version1023.GetHashCode());
Console.WriteLine(Version1024 + " => " + Version1024.GetHashCode());
Console.WriteLine(Version1033 + " => " + Version1033.GetHashCode());
Console.WriteLine(Version1034 + " => " + Version1034.GetHashCode());
/* =====[ Results ]=====
Version 1.0.2.3 => -674112888
Version 1.0.2.4 => -1433627775
Version 1.0.3.3 => -674112889
Version 1.0.3.4 => -1433627776
*/
我会建议,且仅当该字符串将不同保持相同的格式,将字符串split
集中在版本数字部分。对于四元素版本号,我们可以使用通用脚本来将IP4地址转换为long
地址。 这里是一个略低扭捏版本做这种分裂和转换
public static long GetLongFromVersion(string VersionString) {
string[] VersionSplit = VersionString.Split(` `);
string VersionNumber = VersionSplit[1];
string[] VersionBytes;
double num = 0;
if (!string.IsNullOrEmpty(VersionNumber)) {
VersionBytes = VersionNumber.Split(`.`);
for (int i = VersionBytes.Length - 1; i >= 0; i--) {
num += ((int.Parse(VersionBytes[i]) % 256) * Math.Pow(256, (3 - i)));
}
}
return (long)num;
}
而当我们使用这种方法的版本号转换,版本和结果将具有平行间隔。
string Version1023 = "Version 1.0.2.3";
string Version1024 = "Version 1.0.2.4";
string Version1033 = "Version 1.0.3.3";
string Version1034 = "Version 1.0.3.4";
Console.WriteLine(Version1023 + " => " + GetLongFromVersion(Version1023));
Console.WriteLine(Version1024 + " => " + GetLongFromVersion(Version1024));
Console.WriteLine(Version1033 + " => " + GetLongFromVersion(Version1033));
Console.WriteLine(Version1034 + " => " + GetLongFromVersion(Version1034));
/* =====[ Results ]=====
Version 1.0.2.3 => 16777731
Version 1.0.2.4 => 16777732
Version 1.0.3.3 => 16777987
Version 1.0.3.4 => 16777988
*/
它几乎听起来像你要求散列没有使用单词散列。为什么不使用[String.GetHashCode](https://msdn.microsoft.com/en-us/library/system.string.gethashcode(v = vs.110).aspx)?你想做什么? –
你想解决什么*实际*问题?为什么你认为你需要从一个字符串中产生一个数字来解决它?你想要什么样的号码?为什么不为所有字符串返回1?或者第一个或最后一个字符的整数值?除非你解释*你想要什么和为什么*,否则不可能回答。 –
听起来像代码高尔夫 – pm100