Неупорядоченная 2-х строчная функция ha sh, которая всегда выдает один и тот же хеш - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь создать приложение для путешествий, которое может проверять цены между пунктами назначения от A до B, у меня есть таблица, в которой хранятся данные в терминах from и to что-то вроде

CREATE TABLE PRICES {
   from varchar,
   to varchar
   price

Дело в том, что если from = A и to = B, если я пытаюсь найти форму цены B -> A, я не получаю результата. то есть SELECT * from prices where from = 'B' AND to = 'A' конечно, я могу это исправить, выполнив запрос, подобный SELECT * from prices where from = 'A' And To = 'B' OR from = 'B' and 'To' = 'A'

. Есть ли способ, которым я могу создать ха sh, такой, что мне не нужно будет делать этот запрос OR скорее я просто сделаю что-то вроде SELECT * from prices where hash = 'C', в этом случае C будет таким значением, что hash(a, b) = c = hash(b,a), тогда я смогу сохранить has c в таблице, и мне не нужно будет делать OR query.

Я использую Go кстати, если это поможет, но вы можете придумать функцию ha sh на любом языке / псевдокоде.

Спасибо

1 Ответ

0 голосов
/ 05 апреля 2020

Сортировать строки, объединить их с разделителем и вернуть результат.

func abOrBa(a, b string) string {
    if a > b {
       a, b = b, a
    }
    return fmt.Sprintf("%s\t%s", a, b)
}

Запустить его на детской площадке .

Стоимость не может быть симметрия c, как отмечено в комментариях к вопросу. Если это так, в этом подходе может не быть никакой ценности.

...