【发布时间】:2015-01-03 22:20:55
【问题描述】:
我有一个对象列表(在本例中为项目),它们具有类别 ID 和属性(它本身是自定义类型的列表)。
我正在尝试定义一个接受整数列表的函数,例如List(101, 102, 102, 103, 104) 对应于项目的类别 ID,并创建一个元组列表,其中包括类别类型(这是一个选项)和每个类别的属性列表中的每个属性类型。到目前为止,我有以下内容,但我收到value _2 is not a member of Product with Serializable 的错误。
def idxToData(index: List[Int], items: Seq[Item]): List[(Option[Category], Property[_])] = {
def getId(ic: Option[Category]): Int => {
ic match {
case Some(e) => e._id
case None => 0
}
}
index.flatMap(t => items.map(i => if(t == getId(i.category)){
(i.category, i.properties.list.map(_.property).toList.sortWith(_._id < _._id))
} else {
None
}.filter(_ != None )
))
.map(x => x._2.map(d => (x._1, d)))
.toList
}
我不确定它是如何分配该类型的(我当时假设我应该有一个我正在尝试映射的元组列表)。
总体而言,在 scala 中是否有更好的方法来获取所需的结果,即通过获取索引列表并使用它来访问列表中的特定项目,其中每个对应项目的两个部分的元组将“替换”索引来创建新的列表结构?
【问题讨论】:
-
那里有点纠结。您是否有机会将某些功能提取到本地 def 中(然后查看问题是否仍然存在)?如果编译器已编译,编译器可能还会告诉您其他令人担忧的方面(例如,
case None呢?)。如果您只想对从元素计算的内容进行常规排序,则可以使用sortBy作为速记。 (sortBy(_.foo)与sortWith(_.foo < _.foo)相同)。 -
@RexKerr 是的,这有点纠结,我还在用 scala 和 fp 来解决问题。我至少将 match 语句拉到它自己的本地 def 中,并添加了 None 发送回 0 的案例。它似乎仍然与
Product of Serializable一起存在 - 不知道为什么。
标签: list scala dictionary indexing