#scala #case-class
#scala #case-класс
Вопрос:
У меня есть класс case как
case class Attendance(List(name,totalDay))
и у меня есть три переменные
val ana = 0
val mario = 33
val romero = 11
Я должен создать объект класса посещаемости, например, у него есть
имя и посещаемость, только если посещаемость больше нуля, как указано выше, я должен иметь
Attendance((Mario,33),(Romero,12))
Комментарии:
1. Просто небольшой совет: чтобы не травмировать ваши глаза, назовите переменные / значения, используя нижний регистр (например
myVariable
) и типы (например, классы case), используя верхний регистр (напримерMyCaseClass
).
Ответ №1:
Ваш код не только очень далек от того, что считается лучшей практикой в 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)
вы определяете a 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)
Надеюсь, это поможет.
Комментарии:
1. Спасибо за помощь, извините за несоответствие в моем коде. Как я написал псевдокод (при необходимости запишу написание лучшего). Однако ваш код работал как чудо, еще раз большое спасибо
2. @devD Можете ли вы принять ответ, если он был вам полезен?
3. @devD Пожалуйста, примите ответ, если он вам полезен.