这似乎是一个相当简单的问题,但解决方案是让我不知所措:
如果我有以下两个字符串:
string str1 = "Ping";
string str2 = "Pong";
我需要一个算法来为这两个字符串创建一个唯一值,无论它们处于什么顺序。例如:
UniqueValue(str1,str2)和UniqueValue(str2,str1)应返回完全相同的值。
编辑:UniqueValue返回一个字符串。我知道它不会“真正”独特,但类似哈希的值会起作用。
谢谢, 泰勒
答案 0 :(得分:7)
对字符串进行排序。
在每个字符串中将/
转换为//
,将;
转换为/;
。
连接字符串,在每个字符串之间加上;
。
答案 1 :(得分:3)
您可以对哈希码进行Xor。
static string UniqueValue (string str1, string str2)
{
return (str1.GetHashCode () ^ str2.GetHashCode()).ToString ();
}
编辑:或者,您可以生成此字符串:
if (str2 > str1)
return str1+str2;
return str2+str1;
答案 2 :(得分:0)
我会使用某种哈希值,但是我没有看到任何算法会产生100%保证的唯一字符串,这些字符串永远不会被任何其他两个字符串复制。
答案 3 :(得分:0)
我会用SHA1哈希:http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha1.aspx
要确定连接时他们应该在哪个方向,请使用String.CompareTo
:http://msdn.microsoft.com/en-us/library/system.string.compareto.aspx。
答案 4 :(得分:0)
public int UniqueValue(params string[] strings)
{
return String.Join("~", strings.AsEnumerable<string>()
.OrderBy<string, string>(s => s)
.ToArray<string>())
.GetHashCode();
}
当然,这是因为您不需要完整的唯一性,并且哈希码足够好。
答案 5 :(得分:-1)
不,不,不!这都错了!有一种方法可以做到这一点!
给定两个字符串,我们采用首先以词法方式出现的字符串,附加一个唯一符号,并附加第二个字符串。瞧!如果不使用完全相同的两个字符串进行输入,则无法重现生成的字符串!