gpt4 book ai didi

oop - 如何处理特定类型集合的操作?

转载 作者:行者123 更新时间:2023-12-01 11:57:13 24 4
gpt4 key购买 nike

在我的应用程序的几个不同地方,我需要获取一个 Seq[SalesRow] 并返回一个 Map[String,SalesRow],其中字符串是名称一个国家。

我需要在几个地方使用它。例如,我获取了所有 SalesRows 的列表,并按国家/地区获得了全局销售额明细。但在其他地方,我想按月再按国家/地区分割我的销售额(所以 Map[Month,Seq[SalesRow]] 变成 Map[Month,Map[String,Seq[ SalesRow]]]) - 在其他地方,我想按天分割,然后按国家/地区分割。

我的问题是:我在哪里放置采用 Seq[SalesRow] 并将国家/地区 map 返回到行的(少量)逻辑?现在,我将它放在伴随对象方法 SalesRow.byCountry(rows : Seq[SalesReport] 中。这是最优的吗?

我想到了一个稍微疯狂的想法,即创建一个从 Seq[SalesRow]EnhancedSalesRowSeq 的隐式转换,它有一个 byCountry 实例方法。这对我很有吸引力,因为该操作适用于任何序列的 SalesRow。

这是个好主意吗?

将逻辑添加到伴生对象是我的最佳选择,还是有更好的选择?

谢谢。

最佳答案

如果您不知道该库附带一个 groupBy功能。基本上给定一个 Seq[SalesRow],它会根据从 SalesRowT.

因此,如果您的功能很简单,您可以轻松获得 map 。我很喜欢你关于增强 seq 以及将隐式放入 SalesRow 伴侣的想法:

case class SalesRow(val month:Int, val country:String, 
val person:String, val amount:Float)

class EnhancedRow(rows: Seq[SalesRow]) {
def byCountry: Map[String, Seq[SalesRow]] =
rows.groupBy(_.country)
def byMonth: Map[Int, Seq[SalesRow]] =
rows.groupBy(_.month)
def byCountryByMonth: Map[String, Map[Int, Seq[SalesRow]]] = byCountry.mapValues(r => new EnhancedRow(rows).byMonth)
}

object SalesRow {
implicit def toEnhanced(rows: Seq[SalesRow]) = new EnhancedRow(rows)
}

object Test {
def main(args:Array[String] = null) {
val seq: Seq[SalesRow] = // ... fill this
println(seq.byCountry)
println(seq.byCountryByMonth)
// same as:
println(seq.byCountry.mapValues(_.byMonth))
}
}

关于oop - 如何处理特定类型集合的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5843849/

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