gpt4 book ai didi

scala - 理解时类型不匹配 : getting "Product with Serializable"

转载 作者:行者123 更新时间:2023-12-02 01:50:38 25 4
gpt4 key购买 nike

我正在编写一个函数,该函数将获取字符串中出现的字符列表 (List[(Char, Int)]),并生成该出现列表的所有子集。

所以,给定

List(('a', 2), ('b', 2))

它将产生

List(
List(),
List(('a', 1)),
List(('a', 2)),
List(('b', 1)),
List(('a', 1), ('b', 1)),
List(('a', 2), ('b', 1)),
List(('b', 2)),
List(('a', 1), ('b', 2)),
List(('a', 2), ('b', 2))
)

我是这样实现的:

type Occurrences = List[(Char, Int)]

def combinations(occurrences: Occurrences): List[Occurrences] =
if (occurrences.isEmpty) List(List())
else for {
(c, n) <- occurrences
i <- n to 1 by -1
} yield (c, i) :: combinations(occurrences.tail)

我收到此错误:

type mismatch;
found : List[List[Product with Serializable]]
required: List[Occurrences]
(which expands to) List[List[(Char, Int)]]

请帮助我理解为什么会发生这种情况,以及如何解决它?

我尝试将其重写为 flatMap...,使用 Intellij 的“解释 Scala 代码”等。

最佳答案

实际上缺少括号:

type Occurrences = List[(Char, Int)]

def combinations(occurrences: Occurrences): List[Occurrences] =
if (occurrences.isEmpty) List(List())
else (for {
(c, n) <- occurrences
i <- n to 1 by -1
} yield (c, i)) :: combinations(occurrences.tail)

在您的原始理解代码中尝试生成 (c, i)::Combinations(occurrences.tail) ,它是 ListAny 里面的元素(Tuple/另一个List)。

更新:

实现所需魔法的正确方法:

type Occurrences = List[(Char, Int)]


/**
* Returns the list of all subsets of the occurrence list.
* This includes the occurrence itself, i.e. `List(('k', 1), ('o', 1))`
* is a subset of `List(('k', 1), ('o', 1))`.
* It also include the empty subset `List()`.
*
* Example: the subsets of the occurrence list `List(('a', 2), ('b', 2))` are:
*
* List(
* List(),
* List(('a', 1)),
* List(('a', 2)),
* List(('b', 1)),
* List(('a', 1), ('b', 1)),
* List(('a', 2), ('b', 1)),
* List(('b', 2)),
* List(('a', 1), ('b', 2)),
* List(('a', 2), ('b', 2))
* )
*
* Note that the order of the occurrence list subsets does not matter -- the subsets
* in the example above could have been displayed in some other order.
*/
def combinations(occurrences: Occurrences): List[Occurrences] =
occurrences.foldRight(List[Occurrences](Nil)) {
case ((ltr, cnt), acc) =>
acc ::: (for {
comb <- acc
ltrNum <- 1 to cnt
} yield (ltr, ltrNum) :: comb)
}

this code 的作者致敬.

关于scala - 理解时类型不匹配 : getting "Product with Serializable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40158430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com