У меня есть коллекция, которая является перестановкой двух уникальных ордеров, где OrderId уникален. Таким образом, он содержит Order1 (Id = 1)
и Order2 (Id = 2)
как 12
, так и 21
. Теперь, обрабатывая алгоритм маршрутизации, проверяется несколько условий, и если комбинация включена в конечный результат, то ее обратное следует игнорировать и не нужно рассматривать для обработки. Теперь, так как Id является целым числом, я создал следующую логику:Создать уникальный Hashcode для перестановки двух идентификаторов заказа
private static int GetPairKey(int firstOrderId, int secondOrderId)
{
var orderCombinationType = (firstOrderId < secondOrderId)
? new {max = secondOrderId, min = firstOrderId}
: new { max = firstOrderId, min = secondOrderId };
return (orderCombinationType.min.GetHashCode()^orderCombinationType.max.GetHashCode());
}
В логике, я создаю Dictionary<int,int>
, где ключ создается с помощью метода GetPairKey
показано выше, где я убедиться, что из данной комбинации они упорядочены правильно, так что я получаю тот же Hashcode, который можно вставить и проверить для записи в словаре, в то время как его значение является фиктивным и его игнорируют.
Однако выше логики, кажется, есть недостаток, и она не работает должным образом для всей логической обработки, что я делаю неправильно в этом случае, попробую что-то другое, чтобы создать Hashcode
. Это что-то вроде следующего кода лучший выбор, пожалуйста, предложите
Tuple.Create(minOrderId,maxOrderId).GetHashCode
после уместно использование кода:
foreach (var pair in localSavingPairs)
{
var firstOrder = pair.FirstOrder;
var secondOrder = pair.SecondOrder;
if (processedOrderDictionary.ContainsKey(GetPairKey(firstOrder.Id, secondOrder.Id))) continue;
Добавление в словарь, следующий код:
processedOrderDictionary.Add(GetPairKey(firstOrder.Id, secondOrder.Id), 0);
здесь значение 0 манекен и не используется
Если хеш-код является целым числом, а два идентификатора являются целыми числами, вы не можете создавать совершенно уникальные хэши из-за принципа [принципа голубей] (https://en.wikipedia.org/wiki/Pigeonhole_principle). У вас есть 2^32 возможных хэша и 2^63 кортежа, которым вы должны их назначить. – Kevin
Можете ли вы показать код, который использует это со словарем? Из того, что вы описываете, это может быть далеко не оптимальным, но оно все равно должно работать. –
Есть ли у меня возможность выполнить эту работу, чтобы получить уникальную комбинацию идентификаторов –