我想编写一个函数GetHashCodeOfList()
,它返回一个字符串列表的哈希码,而不管顺序如何.给定具有相同字符串的2个列表应返回相同的哈希码.
ArrayList list1 = new ArrayList()
list1.Add("String1");
list1.Add("String2");
list1.Add("String3");
ArrayList list2 = new ArrayList()
list2.Add("String3");
list2.Add("String2");
list2.Add("String1");
GetHashCodeOfList(list1) = GetHashCodeOfList(list2) //this should be equal.
Run Code Online (Sandbox Code Playgroud)
我有几点想法:
我可以先对列表进行排序,然后将排序后的列表合并为1个长字符串然后调用GetHashCode()
.然而,排序是一个缓慢的操作.
我可以在列表中获取每个字符串的哈希值(通过调用string.GetHashCode()
),然后乘以所有哈希值并调用Mod UInt32.MaxValue
.例如:"String1".GetHashCode() * "String2".GetHashCode * … MOD UInt32.MaxValue
.但这会导致数字溢出.
有人有想法吗?
在此先感谢您的帮助.