Я хотел бы написать функцию 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.
У меня было несколько мыслей:
-
Я могу сначала отсортировать список, а затем объединить отсортированный список в 1 длинную строку, а затем вызвать
GetHashCode()
. Однако сортировка - медленная операция. -
Я могу получить хэш каждой отдельной строки (вызывая
string.GetHashCode()
) в списке, затем умножая все хэши и вызывая ModUInt32.MaxValue
. Например:"String1".GetHashCode() * "String2".GetHashCode * … MOD UInt32.MaxValue
. Но это приводит к переполнению числа.
Есть ли у кого-нибудь мысли?
Заранее благодарим за помощь.