List scala:合并2组列表

List scala:合并2组列表,list,scala,set,List,Scala,Set,我正在尝试编写一个函数,它在Scala中组合了两组列表。第二个集合中的每个列表都必须附加到第一个集合中的每个列表,以获得每个可能的排列,但是这不起作用,因为case foo会导致出现错误。有人知道如何修复此问题吗 type foo = List[bar] def combine(s1:Set[foo],s2:Set[foo]):Set[foo] ={ s1.map{ case foo => {s2.foreach{ case foo=

我正在尝试编写一个函数,它在Scala中组合了两组列表。第二个集合中的每个列表都必须附加到第一个集合中的每个列表,以获得每个可能的排列,但是这不起作用,因为case foo会导致出现错误。有人知道如何修复此问题吗

  type foo = List[bar]
    def combine(s1:Set[foo],s2:Set[foo]):Set[foo] ={
      s1.map{
        case foo => {s2.foreach{
        case foo=> a.append(b)}}
      }.toSet
    }

所以我的主要问题是如何在map函数中引用列表

理解不是你想要的吗

for{
  a <- s1
  b <- s2
} yield a.append(b)
用于{

a如果您想用
s2
附加
s1
的所有元素,最简单的方法是:

type bar = Int
type foo = List[bar]
def combine(s1:Set[foo], s2:Set[foo]):Set[foo] = for{
x <- s1
y<- s2
} yield x ::: y

val s1 = Set(List(1),List(2))
val s2 = Set(List(3),List(4))
combine(s1,s2)                                 
//> res0: scala.collection.Set[collection.OwnCollection.foo] = Set(List(1, 3), 
                                              //| List(1, 4), List(2, 3), List(2, 4))
type bar=Int
类型foo=列表[bar]
def联合收割机(s1:Set[foo],s2:Set[foo]):Set[foo]=for{

实现这一点的一种方法是使用flatMap

class Bar
type Foo = List[Bar]
def combine(s1: Set[Foo], s2: Set[Foo]): Set[Foo] = {
  s1.flatMap(a => s2.map(b => a ::: b))
}
请注意,
map
flatMap
的语法形式为
collection.map(x=>transform(x))
,因此此处不需要
case
关键字

一种更简洁的等效方法是用于理解

def combine(s1:Set[Foo], s2:Set[Foo]): Set[Foo] = 
  for(a <- s1; b <- s2)
    yield a ::: b
def联合收割机(s1:Set[Foo],s2:Set[Foo]):Set[Foo]=

对于(a)什么是
a
b
?a和b是我试图以某种方式将案例连接到s1和s2中的元素,但我不太明白如何连接它们,因此它们被保留为a和b(问题的一部分)集,请参见。