Фильтры Django Custom Queryset

В вашем коде есть пара проблем. Но давайте прямо к больно.

В чем главная проблема?

Из вашего кода очевидно, что tree1Ptr является указателем. В принципе, он должен указывать на узел дерева, который имеет два указателя, один на левый узел и один на правый узел.

Итак, где-то в вашем коде вы должны иметь:

tree1Ptr = new Node;   // or whatever the type of your node is called

Однако, во внутреннем цикле вы просто используете его, как если бы это был массив:

for (int i = 0; i < 10000; i++) 
{
    int random = rand() % 20000;
    tree1Ptr->add(random);
    for (int j = 0; j < i; j++) {
        if (tree1Ptr[j]==random)  //<============ OUCH !!
            i--;
    }
}

Компилятор не будет жаловаться, потому что это правильный синтаксис: вы можете использовать индексирование массива по указателю. Но вам нужно убедиться, что вы не выходите за пределы (так что здесь, j остается < 1).

Другие замечания

Кстати, во внутреннем цикле вы просто хотите сказать, что вы должны повторить попытку, если число найдено. Вы можете break выполнить внутренний цикл, если номер уже найден, чтобы не продолжать.

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

Как ее решить?

Вам действительно нужно углубить свое понимание BST. Навигация по узлу требует сравнения со значением в текущем узле и, в зависимости от результата, повторяется, продолжая либо с указателем влево или вправо, не используя индексацию. Но это было бы слишком долго, чтобы объяснить здесь. Так что, может быть, вы должны искать учебник, как этот

7
задан interstar 23 March 2009 в 03:53
поделиться

2 ответа

Я думаю, что Вам, возможно, понадобятся пользовательские менеджеры.

6
ответ дан 6 December 2019 в 09:22
поделиться

Рекомендация начать использовать методы менеджера является хорошей, но отвечать на Ваш вопрос более непосредственно: да, используйте объекты Q. Например:

from django.db.models import Q

complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)

MyModel.objects.filter(complexQuery)

Q объекты может быть объединен с | (ИЛИ), и (И), и ~ (НЕТ).

14
ответ дан 6 December 2019 в 09:22
поделиться
Другие вопросы по тегам:

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