两个字符串的独特价值

时间:2011-06-22 02:03:41

标签: c#

这似乎是一个相当简单的问题,但解决方案是让我不知所措:

如果我有以下两个字符串:

string str1 = "Ping";
string str2 = "Pong";

我需要一个算法来为这两个字符串创建一个唯一值,无论它们处于什么顺序。例如:

UniqueValue(str1,str2)和UniqueValue(str2,str1)应返回完全相同的值。

编辑:UniqueValue返回一个字符串。我知道它不会“真正”独特,但类似哈希的值会起作用。

谢谢, 泰勒

6 个答案:

答案 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.CompareTohttp://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)

不,不,不!这都错了!有一种方法可以做到这一点!

给定两个字符串,我们采用首先以词法方式出现的字符串,附加一个唯一符号,并附加第二个字符串。瞧!如果不使用完全相同的两个字符串进行输入,则无法重现生成的字符串!