在给定一些条件的情况下,如何在Groovy中将列表嵌入到列表中?

在给定一些条件的情况下,如何在Groovy中将列表嵌入到列表中?,groovy,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 <

我有这样一个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
我在这里做的事情是使用
输入查找
b
中发生的可能排列。我会根据需要得到输出。但是如果仔细观察输出,对于相同的输入
go
,即(
input[0]
)产生前两个输出,即
main[0]和main[1]
。由于要保持一种索引方式(即为其生成
input
哪个output
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]


提前谢谢。

我还简化了您的代码:

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
}
如果希望所有单例集都不包含封闭集(如您在示例中所述,尽管我觉得这有点不切实际),那么您可以将
Sp
的最后一行交换为:

result.size() == 1 ? result[0] : result 

我还简化了您的代码:

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
}
如果希望所有单例集都不包含封闭集(如您在示例中所述,尽管我觉得这有点不切实际),那么您可以将
Sp
的最后一行交换为:

result.size() == 1 ? result[0] : result 

Artur的解决方案可以进一步槽化为:

def Sp(a) {
  (a as List).permutations().findAll { s -> b.find( s.join() ) }
}

Artur的解决方案可以进一步槽化为:

def Sp(a) {
  (a as List).permutations().findAll { s -> b.find( s.join() ) }
}

很抱歉,这不符合预期!!返回与我的代码相同的输出!也许你打错了什么?尝试运行它从对不起,你这个代码正在工作。但你能解释一下这是怎么回事吗?您是如何按照我的要求将代码嵌入列表的?函数
Sp
现在返回一个列表(由
result
引用),其中填充了所有匹配的排列。所以在第3行中,我们正在构建一个列表列表。很抱歉,这没有按预期工作!!返回与我的代码相同的输出!也许你打错了什么?尝试运行它从对不起,你这个代码正在工作。但你能解释一下这是怎么回事吗?您是如何按照我的要求将代码嵌入列表的?函数
Sp
现在返回一个列表(由
result
引用),其中填充了所有匹配的排列。因此,在第3行中,我们正在构建一个列表列表。这似乎是非常
Groovier
这似乎是非常
Groovier