合并至少有一个共同项的列表
Combine lists that have at least one item in common
我在 groovy 中有一个列表列表。一些嵌套列表有某些共同点。我希望所有至少有一个共同项目的嵌套列表加入一个列表,例如:
我的清单摘录:
[[buy, order, bought, purchase],
[opinion, point of view],
[opinion, belief],
[buy, purchased],
[buy, order, purchases]]
(嵌套顺序随机)
我想达到的目标:
[[buy, order, bought, purchase, buy, purchased, buy, order, purchases],
[opinion, point of view, opinion, belief]]
有人对如何实现这一目标有任何建议吗?
谢谢!
您可以使用 inject
执行以下操作:
def input = [['buy', 'order', 'bought', 'purchase'],
['opinion', 'point of view'],
['opinion', 'belief'],
['buy', 'purchased'],
['buy', 'order', 'purchases']]
input.inject([]) { list, current ->
list.find { it.intersect(current) }?.addAll(current) ?: list << current
list
}
因此,在输出列表中找到与当前输入列表相交的元素,如果存在,则将其添加到该输出列表。
如果没有找到,将输入列表添加到输出列表
我在 groovy 中有一个列表列表。一些嵌套列表有某些共同点。我希望所有至少有一个共同项目的嵌套列表加入一个列表,例如:
我的清单摘录:
[[buy, order, bought, purchase],
[opinion, point of view],
[opinion, belief],
[buy, purchased],
[buy, order, purchases]]
(嵌套顺序随机)
我想达到的目标:
[[buy, order, bought, purchase, buy, purchased, buy, order, purchases],
[opinion, point of view, opinion, belief]]
有人对如何实现这一目标有任何建议吗? 谢谢!
您可以使用 inject
执行以下操作:
def input = [['buy', 'order', 'bought', 'purchase'],
['opinion', 'point of view'],
['opinion', 'belief'],
['buy', 'purchased'],
['buy', 'order', 'purchases']]
input.inject([]) { list, current ->
list.find { it.intersect(current) }?.addAll(current) ?: list << current
list
}
因此,在输出列表中找到与当前输入列表相交的元素,如果存在,则将其添加到该输出列表。
如果没有找到,将输入列表添加到输出列表