我正在尝试根据其他数组的值更改数组的值。特别是这些是我正在使用的数组:
val inpoly: Array[Boolean]=Array(false, true, true, false)
val idx1: Array[Boolean]=Array(true, false, false, false)
我想检查数组idx1
的正确性,我想在该特定位置将inpoly
设置为true,否则,只需保留inpoly
的值有。
我的预期结果是拥有这个数组:
final_vector= true, true, true, false
由于idx1
的第一个值为true,因此将true分配给inpoly
。 idx1
的所有其他值均为false,因此请按原样保留inpoly
我尝试了以下代码:
idx1.map({
case true => true
case false => inpoly})
但是我得到以下结果:
res308: Array[Any] = Array(true, Array(false, true, true, false), Array(false, true, true, false), Array(false, true, true, false))
有人可以帮忙吗?
答案 0 :(得分:1)
您似乎想在布尔对上使用“或”。这是使用||
(Scala的OR函数)的一种方法:
val updated = inpoly.zip(idx1).map(pair => pair._1 || pair._2)
这将为您提供:
updated: Array[Boolean] = Array(true, true, true, false)
在这里,zip会将两个数组组合成一个成对的数组。然后,您将映射这些对,如果其中一个为true,则返回true;如果两个均为false,则返回false。
您还可以使用模式匹配:
val updated = inpoly.zip(idx1).map {
case (left, right) => left || right
case _ => None
}
如果一个数组的长度与另一个数组的长度不同,您将要考虑要做什么。
并且,如果您坚持修改inpoly
而不是创建新数组,请执行以下操作:
var inpoly: Array[Boolean]=Array(false, true, true, false)
val idx1: Array[Boolean]=Array(true, false, false, false)
inpoly = inpoly.zip(idx1).map(pair => pair._1 || pair._2)
请注意,在这里,我们将inpoly
声明为var
,而不是val
。但是,我建议将inpoly
保留为val
,并为该数组的更新版本创建一个新的val
。在Scala中,建议使用不可变值,尽管这可能需要一些时间来习惯。
答案 1 :(得分:0)
您需要压缩两个数组,以便可以在一对值fe上进行迭代:
idx1.zip(inpoly).map{
case (true, _) => true
case (_, value) => value
}
但是请注意,这段代码将创建新的数组,inpoly
将不会更改。