我有一个案例课
case class Attendance(List(name,totalDay))
Run Code Online (Sandbox Code Playgroud)
我有三个变量
val ana = 0
val mario = 33
val romero = 11
Run Code Online (Sandbox Code Playgroud)
我必须创建出勤类的对象,例如只有当出勤率大于零(如上)时,他们才具有姓名和出勤率
Attendance((Mario,33),(Romero,12))
Run Code Online (Sandbox Code Playgroud)
就变量和类的命名而言,您的代码不仅与Scala中被认为是最佳实践的地方相距甚远,而且还存在一些不一致之处:
首先,显示代码片段:
// --- WRONG --- //
val Ana = 0
val Mario = 33
val Romero = 11
Run Code Online (Sandbox Code Playgroud)
然后显示代码片段
// --- WRONG --- //
Attendance((Mario,33),(Romero,12))
Run Code Online (Sandbox Code Playgroud)
问题在于,在这种情况下,(Mario, 33)仅表示(33, 33),因为Mario是您分配给的变量33。相反,您应该做的是:
val ana = ("Ana", 0)
val mario = ("Mario", 33)
val romero = ("Romero", 11)
Run Code Online (Sandbox Code Playgroud)
另一个不一致之处是
// --- WRONG --- //
case class attendance(List(name,totalDay))
Run Code Online (Sandbox Code Playgroud)
这不会编译。写当List(name, totalDay)你定义一个List包含两个元素,name和totalDay。这些元素在您的示例中未定义。
您要执行的操作是:
case class Attendance(attendees: List[(String, Int)])
Run Code Online (Sandbox Code Playgroud)
什么attendees: List[(String, Int)]意思
这意味着您要为case类定义一个参数Attendance,该参数称为attendees,并且类型为List[(String, Int)](说:“ 元组列表,每个元组都由字符串和整数组成 ”)
然后,您可以使用它:
val listOfAttendees: List[(String, Int)] = ??? // Not implemented yet
val attendance = Attendance(listOfAttendees)
Run Code Online (Sandbox Code Playgroud)
但是你是怎么做的listOfAttendees呢?
答案是filter:
val allAttendees = List(ana, mario, romero)
val filteredAttendees = allAttendees.filter {
case (name, days) => days > 0
}
Run Code Online (Sandbox Code Playgroud)
放在一起:
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)
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。