Альтернативы GetHashCode и применение в .Select - PullRequest
0 голосов
/ 20 сентября 2018

Привет всем, у меня есть большой набор данных, который я загружаю в Elastic Search.

Elastic требует уникальный идентификатор для загрузки записи, и я использую .GetHashCode () для достижения этого в выражении lambda / linq.

var fullList = js.Select(x => "{\"create\": {\"_index\":\"" + elasticType + "\",\"_type\" :\"" + elasticType + "\", \"_id\" :\"" + x.GetHashCode() + "\"}}

Проблема, с которой я сталкиваюсь, заключается в том, что GetHashCode () выдает одинаковое значение для некоторых строк данных.

Я убедился, что данные каждой строки не совпадают, добавив к ней номер строки, чтобы каждая строка была уникальной.Но иногда хэш конфликтует.

Есть ли 1) лучшая функция хеш-кода и 2) способ включить это в приведенный выше код.Или мне нужно будет заменить лямбду более многословным циклом?

Заранее спасибо

1 Ответ

0 голосов
/ 20 сентября 2018

1) лучшей функции хеш-кода

Нет, и это должно быть очевидно.Он называется парадоксом дня рождения , в котором говорится, что при достаточном количестве значений, помещаемых в ограниченное количество сегментов (т. Е. Хэшированных), у вас всегда будут дубликаты.

Если вы хотите уникальныйидентификатор, используйте уникальный идентификатор.Хеширование это не так, и также не являются GUID .Используйте индекс строки, если он у вас есть, он уникален для вашего набора данных, и Select может вернуть его вам во время итерации.

...