Необходимо добавить кортеж в переменную класса case при условии

#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 Пожалуйста, примите ответ, если он вам полезен.