Mutable Sorted Set в Python [дубликат]

Я использую mysql 5.5.24, и работает следующий код:

select * from (
SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`,
SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode`
FROM `users` LEFT OUTER JOIN `locations`
ON `users`.`id` = `locations`.`user_id`
) as a
WHERE guaranteed_postcode NOT IN --this is where the fake col is being used
(
 SELECT `postcode` FROM `postcodes` WHERE `region` IN
 (
  'australia'
 )
)
0
задан dabadaba 13 July 2018 в 10:05
поделиться

1 ответ

Матчи могут иметь одинаковый старт.

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

  • Вы не можете изменить порядок сортировки элемента, находящегося в контейнере. Контейнер не знает, что порядок сортировки изменился.
  • Объекты должны быть разными.

Если вы прочитали документацию для sortedset, она четко заявляет :

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

  • Там даже не существует полный порядок для ваших элементов, потому что существует x != y, где он не является истинным, что x < y или x > y.
  • Вы вообще не упоминали __hash__.

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

0
ответ дан Dietrich Epp 17 August 2018 в 12:47
поделиться
  • 1
    Я полностью пропустил эту часть документации, я думал, что объекты могут быть изменчивыми. Я не уверен, что вы имеете в виду с последними двумя пунктами. И как вы предлагаете мне приступить к изменению моего выбора структуры данных для удовлетворения моих потребностей? – dabadaba 13 July 2018 в 14:56
  • 2
    Объекты могут быть изменены. Вы просто не можете изменить свое положение, пока они находятся в наборе. Представьте, что я даю вам сборник книг, и вы поместите их на полку в алфавитном порядке. Затем, в течение ночи, я пробираюсь в вашу комнату и меняю названия книг, чтобы они больше не были в алфавитном порядке. Это то, что вы делаете. – Dietrich Epp 13 July 2018 в 15:39
  • 3
    – dabadaba 13 July 2018 в 15:42
  • 4
    Вы можете изменить start, но (1) вы не можете изменить общий порядок объектов в коллекции и (2) вы не можете изменить хэш любого объекта в коллекции. В общем, самый простой способ сделать это - просто не изменять ключи объектов, пока они находятся в коллекциях, а самый простой способ сделать это - сделать ключи объектов неизменными. Конечно, вы можете сделать все для себя. Но, вероятно, проще перепроектировать вашу систему, поэтому вам не нужно менять ключи объектов для объектов в коллекциях. – Dietrich Epp 13 July 2018 в 15:48
  • 5
    @DeitrichEpp хорошо ключи не меняются. Ключами являются Match объекты. Это match.start, что изменилось. Как я могу изменить порядок объектов? – dabadaba 13 July 2018 в 15:50
Другие вопросы по тегам:

Похожие вопросы: