сопоставление шаблонов scala для понимания

В scala у вас может быть понимание, которое перебирает список объектов, а затем создает массивы значений на основе типа одного из атрибутов элементов? Итак, предположим, что у меня есть список элементов, и каждый элемент имеет атрибут, и атрибут может быть разных типов...

for (element <- elementList) element.attribute match {
 case a: Type1 => "Type1"
 case a => "All Types"
}

И тогда результирующий массив будет массивом со значениями, такими как

Array("Type1", "Type1", "All Types", "Type1", "All Types", "All Types", "All Types", "All Types") 

person uh_big_mike_boi    schedule 14.10.2017    source источник
comment
В чем вопрос?   -  person pamu    schedule 14.10.2017
comment
То, что я написал, не работает. Вопрос в том, как сделать массив   -  person uh_big_mike_boi    schedule 14.10.2017


Ответы (2)


Все, что вам нужно сделать, это yield результат... И, возможно, преобразовать в Array.

(for (element <- elementList) yield element.attribute match {
  case a: Type1 => "Type1"
  case a => "All Types"
}).toArray
person Jasper-M    schedule 14.10.2017

Почему вы не используете функцию карты от List(Element) до List(String)?

Если вы хотите получить массив из List(String), у вас есть функция toArray.

person Community    schedule 14.10.2017
comment
так что это будет просто: elementList map { _.attribute match { /* cases */ } }.toArray, верно? - person blackwizard; 31.05.2019