определить карту над логической скалой - PullRequest
0 голосов
/ 27 августа 2018

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

val inpoly: Array[Boolean]=Array(false, true, true, false)
val idx1: Array[Boolean]=Array(true, false, false, false)

Я хотел бы проверить массив idx1 и где он равен true, я хотел бы присвоить новому вектору противоположное значение массива inpoly в этой конкретной позиции, в противном случае просто оставьте значение, которое inpoly уже имеет.

Я ожидал бы иметь этот массив:

final_vector= true, true, true, false

, поскольку первое значение idx1 равно true, измените первое значение inpoly. Все остальные значения idx1 являются ложными, поэтому оставьте inpoly таким, как он есть

Я пытался использовать следующий код:

idx1.map({
case true => !inpoly
case false => inpoly}
)

Однако я получаю следующую ошибку:

<console>:73: error: value unary_! is not a member of Array[Boolean]
              case true => !inpoly
                           ^

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 27 августа 2018

Вы проводите поэлементное сравнение двух коллекций. Лучший способ сделать это - zip их вместе, а затем map два значения, чтобы дать ответ:

inpoly.zip(idx1).map{ case (poly, idx) => poly ^ idx }

В этом случае эти два значения имеют xor-ed, но, очевидно, вы можете использовать любую комбинацию двух значений для генерации результата.

...