在条件下需要在案例类变量中添加元组

时间:2019-04-11 14:58:29

标签: scala case-class

我的案例分类为

case class Attendance(List(name,totalDay))

我有三个变量

val ana = 0
val mario = 33
val romero = 11

我必须创建出勤类的对象,例如 仅当出勤率大于零(如上述我应有的情况)时,才能显示姓名和出勤率

Attendance((Mario,33),(Romero,12))

1 个答案:

答案 0 :(得分:5)

您的代码不仅在变量和类命名方面与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)时,您将定义一个包含两个元素Listname的{​​{1}}。在您的示例中未定义这些元素。

您要执行的操作是:

totalDay

case class Attendance(attendees: List[(String, Int)]) 是什么意思?

这意味着您为案例类attendees: List[(String, Int)]定义了一个参数, 该参数称为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
}

Try it out!


我希望这会有所帮助。