170 похожих чатов

День добрый. Есть дерево. Надо уметь выбирать его лист или

узел. лист или узел можно выбрать по любому из 2х параметров: Тип или Имя. Сейчас я в процедуру выбора передаю корень и массив селекторов (Тип селектора и значение селектора). Получается очень многословно. Но если ввести строку по типу XPath и ее парсить, то парсинг этой строки будет довольно дорогой (относительно самого выбора дерева). Можно-ли как-то сказать что если у меня с вызывающей стороны константа (строка), то на этапе компиляции я хочу ее переделать в то что удобно мне? Или на этапе первого вызова. Что-то типа GIT компиляции.

50 ответов

24 просмотра

Покажите где многословно получается

А во что ты бы хотел эту строку переделать? Может, просто лямбочку передавать, а?

Warstone- Автор вопроса
Dr. Friedrich von Never
А во что ты бы хотел эту строку переделать? Может,...

У меня есть функция, которая выбирает лист. Вот в нее.

Warstone- Автор вопроса
Warstone
Причем тут это?..

Говоришь — хочу передать строку, которая идентифицирует функцию. Я говорю — ну и передай функцию. А ты такой — причём тут это.

Warstone- Автор вопроса

var result = Select(Tree, new Selector[] { new Selector(){Type = SelectorType.Name, Selector = "qwe"}, new Selector(){Type = SelectorType.Type, Selector = "rty"}, new Selector(){Type = SelectorType.Name, Selector = "asd"}, new Selector(){Type = SelectorType.Name, Selector = "fgh"}, new Selector(){Type = SelectorType.Type, Selector = "zxc"}, new Selector(){Type = SelectorType.Type, Selector = "vbn"}, });

Warstone
var result = Select(Tree, new Selector[] { new S...

А что возвращает? Список нод, удовлетворяющих условиям всем? Или хотя бы одному?

Warstone
Это не важно

Сделайте fluentapi А ля ByName(name).ByType(type) и т.д.

Warstone
var result = Select(Tree, new Selector[] { new S...

Ну вот те впадлу передать туда x => x.qwe, ну например? Или select("qwe")?

Warstone- Автор вопроса
Dr. Friedrich von Never
Ну вот те впадлу передать туда x => x.qwe, ну напр...

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

Oleg Safonov
Я не понимаю пока вообще ничего что то

Если честно, я тоже. Но надеюсь, что в процессе обсуждения всё-таки станет понятнее.

Warstone
Не впадлу, а мне тогда придется заниматься анализо...

Она ж всегда одинаковая Кэш, да, как предложили выше

Warstone- Автор вопроса
Dr. Friedrich von Never
Закэшируй.

И как это сделать так, чтобы небыло обращение к какому-нибудь дикшенари?

Warstone
И как это сделать так, чтобы небыло обращение к ка...

Что за требования к производительности такие зверские?

Рассчитайте на старте приложения один раз результат и возвращайте его всегда Раз аргументы всегда одинаковые

Warstone
Дерево всегда разное

Тогда что планируется делать в компилтайме?

Warstone- Автор вопроса
Warstone
Дерево всегда разное

Строку распарсьте один раз на старте

Warstone- Автор вопроса
Oleg Safonov
Строку распарсьте один раз на старте

Тогда это потеряет читабельность или покажите примерный код.

Warstone
Тогда это потеряет читабельность или покажите прим...

Вы уж решите, или читабельность или 100к в секунду

Warstone- Автор вопроса
Oleg Safonov
Вы уж решите, или читабельность или 100к в секунду

Все вместе. Я знаю решение для других языков.

Warstone- Автор вопроса
Dr. Friedrich von Never
Код парсинга строки?

Код вызова так, чтобы он был быстрый.

Warstone
Все вместе. Я знаю решение для других языков.

Тогда на старте приложение распарсте строку, сложите в структуру какую нибудь. И потом не парьсте её и не принимайте на вход вообще

Warstone- Автор вопроса
Oleg Safonov
Тогда на старте приложение распарсте строку, сложи...

Тогда это будет менее наглядно. Так как сама строка будет не рядом с вызовом Select'а, а где-то еще.

Warstone
Код вызова так, чтобы он был быстрый.

Чтобы вызов был быстрый — его можно заинлайнить. Но проблема точно в этом?

Warstone
Тогда это будет менее наглядно. Так как сама строк...

Ну это нормально, раз там строка всегда одна Это как конфиг уже, какая разница что там конкретно

Warstone- Автор вопроса
Dr. Friedrich von Never
Пример чего?

Того о чем вы говорите. Просто C# не совсем родной язык.

Warstone- Автор вопроса
Oleg Safonov
Ну это нормально, раз там строка всегда одна Это ...

Ну вот в Перле я-бы написал что-то типа: my $result = search(state $search_path = Searcher.Build("qwe/rty")); В условных плюсах код был-бы таким-же

Warstone
Ну вот в Перле я-бы написал что-то типа: my $resul...

А на сишарпе кто мешает так же написать?

Warstone- Автор вопроса
Oleg Safonov
И как тут избегаете парсинга?

Все state переменные инициализируются один раз в жизни функции

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта