#groovy
#groovy
Вопрос:
У меня есть такой заводной код :
main = []
b="ogodtsneeencs"
def input = ["go", "good", "do", "sentences", "tense", "scen"]
(0..(input.size()-1)).each{ Sp(input[it]) }
def Sp(def a)
{
flag = false
list = []
(0..(a.size()-1)).collect { list << a[it] }
ans = list.permutations().each { temp = it.join()
if(b.find("$temp"))
{
main << it
flag = true
}
}
if(flag == false)
main << null
}
println main
какие результаты :
[[o, g], [g, o], [o, g, o, d], [o, d], [t, s, n, e, e, e, n, c, s], [t, s, n, e, e], [e, n, c, s]]
То, что я здесь делаю, — это найти возможные перестановки, которые произошли при b
использовании input
. И я получаю выходные данные по мере необходимости. Но если внимательно следить за выводом, для одного и того же ввода go
i.e( input[0]
) выдает первые два вывода main[0] and main[1]
, т.е. Поскольку для сохранения типа индекса (т.Е. Для input
которого main
создается вывод), как я могу изменить приведенный выше код, чтобы вывод возвращался следующим образом :
[[[o, g], [g, o]], [o, g, o, d], [o, d], [t, s, n, e, e, e, n, c, s], [t, s, n, e, e], [e, n, c, s]]
Указание на то, что первые оба вывода одинаковы для одного и того же ввода, в нашем случае это так input[0]
.
Заранее спасибо.
Ответ №1:
Решение Артура может быть дополнительно доработано до:
def Sp(a) {
(a as List).permutations().findAll { s -> b.find( s.join() ) }
}
Комментарии:
1. кажется, это намного
Groovier
Ответ №2:
Я также немного упростил ваш код:
b="ogodtsneeencs"
def input = ["go", "good", "do", "sentences", "tense", "scen"]
main = input.collect { Sp(it) }
def Sp(a) {
def list = a as List
def result = []
list.permutations().each {
if (b.find(it.join())) result << it
}
result
}
Это приведет к:
[[[o, g], [g, o]], [[o, g, o, d]], [[o, d]], [[t, s, n, e, e, e, n, c, s]], [[t, s, n, e, e]], [[e, n, c, s]]]
Если вы хотите иметь все одноэлементные наборы без включающего набора (как вы написали в своем примере, хотя я нахожу это немного непрактичным), то вы можете просто поменять последнюю строку Sp
на:
result.size() == 1 ? result[0] : result
Комментарии:
1. Извините, это работает не так, как ожидалось!! Возвращает тот же результат, что и мой код!
2. Может быть, вы что-то неправильно ввели? Попробуйте запустить его отсюда
3. Извините, Я. Этот код работает. Но можете ли вы объяснить, как это работает? Как вы создали свой код для встраивания списка, как я просил об этом?
4. Функция
Sp
теперь возвращает список (на который ссылаетсяresult
), который заполнен всеми соответствующими перестановками. Итак, в строке 3 мы создаем список списков.