我有一个案例类
case class Attendance(List(name,totalDay))
我有三个变量
val ana = 0
val mario = 33
val romero = 11
我必须创建出勤级别的对象,例如他们有名字和出勤,只有当出勤率大于零时才像上面那样我应该有
Attendance((Mario,33),(Romero,12))
您的代码不仅与变量和类命名方面的Scala最佳实践相距甚远,而且还存在不一致性:
首先,您将显示代码段:
// --- WRONG --- //
val Ana = 0
val Mario = 33
val Romero = 11
然后你显示代码片段
// --- WRONG --- //
Attendance((Mario,33),(Romero,12))
问题是在这种情况下,(Mario, 33)
只是意味着(33, 33)
,因为Mario
是你指定为33
的变量。你应该做的是:
val ana = ("Ana", 0)
val mario = ("Mario", 33)
val romero = ("Romero", 11)
另一个不一致是
// --- WRONG --- //
case class attendance(List(name,totalDay))
这不会编译。在写List(name, totalDay)
时,你定义了一个包含两个元素List
和name
的totalDay
。您的示例中未定义这些元素。
你想要做的是:
case class Attendance(attendees: List[(String, Int)])
attendees: List[(String, Int)]
是什么意思?
这意味着你为case类Attendance
定义一个参数,这个参数叫做attendees
,类型为List[(String, Int)]
(说:“一个元组列表,每个元组由一个字符串和一个整数组成”)
然后你可以使用它:
val listOfAttendees: List[(String, Int)] = ??? // Not implemented yet
val attendance = Attendance(listOfAttendees)
但你怎么做listOfAttendees
?
答案是filter
:
val allAttendees = List(ana, mario, romero)
val filteredAttendees = allAttendees.filter {
case (name, days) => days > 0
}
把它们放在一起:
val ana = ("Ana", 0)
val mario = ("Mario", 33)
val romero = ("Romero", 11)
case class Attendance(attendees: List[(String, Int)])
val allAttendees = List(ana, mario, romero)
val filteredAttendees = allAttendees.filter {
case (name, days) => days > 0
}
val attendance = Attendance(filteredAttendees)
我希望这有帮助。