В julia У меня есть словарь, который может содержать другие словари, списки строк/чисел, списки словарей, строк/чисел и диапазонов.Создайте всю комбинацию словарей, содержащих диапазоны
Мне нужен список, содержащий всю возможную комбинацию словарей для каждого диапазона (например, StepRange, FloatRange, UnitRange), который содержится в нем.
Пример:
Dict{}("A" => Dict{}("B" => 1:1:3, "C" => 2), "B" => [Dict{}("S" => 1:1.1:2.1)])
=>
[
Dict{}("A" => Dict{}("B" => 1, "C" => 2), "B" => [Dict{}("S" => 1.1)]),
Dict{}("A" => Dict{}("B" => 2, "C" => 2), "B" => [Dict{}("S" => 1.1)]),
Dict{}("A" => Dict{}("B" => 3, "C" => 2), "B" => [Dict{}("S" => 1.1)]),
Dict{}("A" => Dict{}("B" => 1, "C" => 2), "B" => [Dict{}("S" => 2.1)]),
Dict{}("A" => Dict{}("B" => 2, "C" => 2), "B" => [Dict{}("S" => 2.1)]),
Dict{}("A" => Dict{}("B" => 3, "C" => 2), "B" => [Dict{}("S" => 2.1)])
]
Прямо сейчас, я перегружать рекурсивную функцию, как это, но не имеют ни малейшего представления о том, как продолжить.
function iterate(generic, nets::Array)
return (generic, false)
end
function iterate(range::Union{StepRange,FloatRange,UnitRange}, nets::Array)
return (collect(range), true)
end
function iterate(array::Array, nets::Array)
for (n, v) in enumerate(array)
res = iterate(v, nets)
if res[2]
## We found a range! Return it
return res
end
end
return (array, false)
end
function iterate(dict::Dict, nets::Array)
for (k, v) in dict
res = iterate(v, nets)
if res[2]
return (dict, true)
end
end
return (dict, false)
end
(я уже сделал это в Python, но работать на фрагмент текста, используя регулярное выражение, чтобы найти пользовательские определенные диапазоны (как «[1,2,0.1]») и после генерации текста кода разборе это.)
В примере, ' "B"=> 1: 1: 3' пока только выходные списки' "B" => 1 'и '" Б "= 2', а не' "B" => 3'. Это ошибка/опечатка? (так как 'collect (1: 1: 3) == [1,2,3]') –
Исправлено, извините. Я ненавидел текстовый редактор stackoverflow и хотел как можно скорее выбраться из него: D – Nico202