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

Ребят, привет! Что-то я загрустил... Может кто-то из вас предложит алгоритм

по построению дерева элементов из массива строк?..
Имеем следующий массив строк:
t1 = {
"Horse 1 paw 1",
"Horse 1 paw 2",
"Horse 1 paw 3",
"Horse 1 paw 4",
"Horse 1 tail",
"Horse 2 paw 1",
"Horse 2 paw 2",
"Horse 2 paw 3",
"Horse 2 paw 4",
"Horse 2 tail"
}

Надо получить дерево такого вида:
t2 = {
["Horse "] = {
["1 "] = {
["paw "] = {
"1",
"2",
"3",
"4",
},
"tail"
},
["2 "] = {
["paw "] = {
"1",
"2",
"3",
"4",
},
"tail"
}
}
}

Мне в глову приходят мысли оооч противоречивые, придумать ничего путного пока не смог....
Несколько уточнений:
1. В реальности, это не массив, а список значений по индексу. Ну, так, мало ли, может есть какой-то способ предварительно не гнать их в массив.
2. В строках может быть и Horse, и Dog, и Babushka с каким-то набором подстрок, их сгонять в общие деревья не нужно, просто построить дерево от первого совпадения.

Если у кого-то что-то такое завалялось, с меня бутылка Колы!)))

14 ответов

55 просмотров

1. а разве список значений по индексу это не массив?) пускай и ассоциативный и с дырками???, непонятно какие индексы ты тут выбираешь вообще 2. что значит первое совпадение? 3. Какие мысли тебе в голову приходили, расскажи, подтолкнём в нужное направление)

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

Ты хочешь добавить только уникальные значения или повторы тоже необходимы?

Денис-Outsider Автор вопроса
UtoECat
1. а разве список значений по индексу это не масси...

Значения по индексу - имелось нечно следующее: for i = 0, getNumStrings() do local stri = getStr(i) end

А в чём проблема сделать сплит каждой строки и в цикле загонять ? Не очень ясна проблема.

Денис-Outsider Автор вопроса
UtoECat
что за getNumStrings 🤔

абстрактный getNumStrings()

Денис Outsider
абстрактный getNumStrings()

что эта абстрактная функция делает? а то и задача абстрактной получается)

Денис-Outsider Автор вопроса
UtoECat
что эта абстрактная функция делает? а то и задача ...

Ну вы же посмотрели на сигнатуру цикла, посмотрели же, верно? Что обычно в этом параметре цикла бывает? Максимальное количество шагов.

Денис-Outsider Автор вопроса
Неполноценный
Ты хочешь добавить только уникальные значения или ...

Необходимо все, просто оно должно максимально сворачиваться в деревья.

Денис Outsider
Ну вы же посмотрели на сигнатуру цикла, посмотрели...

т.е ты хочешь, чтобы узлы дерева были представлены массивом, а узлы с потомками - ассоциативными массивами, я правильно понял? Просто индексацию с нуля, а не с 1. > их сгонять в общие деревья не нужно каково условие того, что не нужно делать поддерево для данной части строки?

local function split(text, sep) sep = sep or " " local output = {} for block in (text .. sep):gmatch("(.-)" .. sep) do output[#output + 1] = block end return output end function treefication(t) local fill function fill(node, items) local key = table.remove(items, 1) if #items == 0 then return table.insert(node, key) end if not node[key] then node[key] = {} end fill(node[key], items) end local output = {} for i, line in ipairs(t) do local items = split(line) fill(output, items) end return output end { Horse = { ["1"] = { "tail", paw = { "1", "2", "3", "4" } }, ["2"] = { "tail", paw = { "1", "2", "3", "4" } } } }

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

Snusmumriken
Вообще, подобные штуки можно смело использовать в ...

Нууу ещё неточный поиск, расстояния Левенштейна...

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

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

how would ypu guys protect your public groups (with more than 1k members) without restricting user's freedom?
Mat Lumin
24
Пятничное. Немножко длинно объясню постановку задачи и потом задам вопрос, не требующий срочного решения (я уже решил по-другому). Есть пару сотен хостов на Бубунте, туда мо...
Д. П.
5
а что это все вдруг так рьяно стали обезьяну продвигать? вроде ещё недавно все в один голос вопили, что она сырая.... неужели Розыч ошибся, сделав ставку на лазарь?
Iluha Companets
25
2 байта генерирует?
int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
12
ты ж не будешь его сам придумывать не зная алгоритма его появления?
Aiwan \ (•◡•) / _bot
42
Warning Failed to apply the selected architecture x86_64-pc-windows-msvc. Got ["x86"]. Error Unsupported architecture: x86_64-pc-windows-msvc кто-нибудь знает, что с ldc2? вот...
quantumde1 Зубенко
3
Зачем вы пишите на ассемблере?
Florson In
85
всем привет, как можно получить количество символов в строке в Fasm x86?
.
24
как максимально эффективно сравнить две asciiz строки на ассемблере?
Vi Chapmann
80
Ребят, а есть у кого-то реализация прокси (прямого) на Vapor? Примеров не нашел, ковыряюсь сам несколько дней. Сделал middleware с async-http-client для этого. В идеале виж...
advanc3d
2
Карта сайта