Условие в методе Scala Map - PullRequest
0 голосов
/ 05 июля 2019

В Python я легко могу создать новый список по условию

list_1 = [1,2,3,4,5]
new_list = [e for e in list_1 if e>3]
# result [4,5]

Но не та же история для Скалы. Я пытался использовать метод карты map

var array_1 = Array(1,2,3,4,5)
var new_array = array_1.map(e => if(e>3) e)
// result: [undefined, undefined, undefined, 4, 5]

Есть ли какая-то магия, которую я здесь не знаю? Благодарен за помощь

Ответы [ 3 ]

5 голосов
/ 05 июля 2019

Попробуй filter вот так

var new_array = array_1.filter(e => e > 3)

который выводит

new_array: Array[Int] = Array(4, 5)
3 голосов
/ 05 июля 2019

Решение, предложенное @Mario, является предпочтительным способом достижения этого в Scala.

В любом случае, вы также можете достичь этого, используя для понимания, аналогично тому, как это делается в python:

for {e <- array_1; if e > 3} yield e

Этот код обращается к вызову метода filter.

1 голос
/ 05 июля 2019

map - просто применить метод к каждому элементу.

filter - отфильтровать каждый элемент.

Вы можете объединить их, сделав один collect с Partial Function

Seq(0, 1, 2, 3, 4, 5).collect{
  case e if 3 < e => 2*e
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...