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

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

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

50 ответов

19 просмотров

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

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

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 переменные инициализируются один раз в жизни функции

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

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

лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
Яндекс маршрутизатор кто-нибудь использовал с своих проектах, чтоб через него маршруты составить/посчитать? Насколько простой/муторный сервис?
Dreamer_0x01 VeseloV
7
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Дебил? Я ищу друга
Bitard 228
27
Карта сайта