需要在条件类型变量的情况下添加元组

问题描述 投票:-2回答:1

我有一个案例类

case class Attendance(List(name,totalDay))

我有三个变量

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

我必须创建出勤级别的对象,例如他们有名字和出勤,只有当出勤率大于零时才像上面那样我应该有

Attendance((Mario,33),(Romero,12))
scala case-class
1个回答
6
投票

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

你想要做的是:

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)

Try it out!


我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.