列表中有三个列表。
val l = List(List(1, 0, 0), List(1, 1, 0), List(1, 0, 1))
现在的问题是使用条件检查在列表中添加值,基本上我需要检查每个元素的明智值,如果相等,则进行一些计算,如果不进行其他计算。我厌倦了使用转置对相同元素位置进行分组,然后映射结果并将当前元素与列表中的先前元素进行比较,我认为最后一部分是我不清楚的地方。
编辑:
更多解释,可以说我们有这样的列表
List(List(i1, j1, k1), List(i2, j2, k2), List(in, jn, kn))
如果i1等于i2,则1 + i1 + i2 * 0.5,而j1等于j2,则1 + j1 + j2 * .0.5并升至kn 第二个条件是如果它们不相等 i1不等于i2然后减一,就是i1 + i2 * 0.5
希望这对解释有所帮助
我正在寻找的输出
List[Double] = List(2.5, 0.5, 0.5)
答案 0 :(得分:1)
您的描述仍然很混乱,但我想也许您正在追求这样的事情。
val lst = List(List(1, 0, 0), List(1, 1, 0), List(1, 0, 1))
lst.transpose
.map(sublst => sublst.sum*0.5 + (if (sublst.forall(_==sublst.head)) 1 else 0))
//res0: List[Double] = List(2.5, 0.5, 0.5)
如果子列表的所有元素都相同,则将1
添加到计算中,否则添加0
。
答案 1 :(得分:1)
lst.transpose.map(v=>if(v.forall(_==v.head)) v.sum*0.5+1 else v.sum*0.5))
或
lst.transpose.map(v=>if(v.exists(_!=v.head)) v.sum*0.5 else v.sum*0.5+1)
或
lst.transpose.map(v=>if(v.find(_!=v.head)!=None) v.sum*0.5 else v.sum*0.5+1)
一般来说,这些可以用于two different expressions
的两种不同情况下的评估,即调用all elements equal or not equal
函数后,列表中的transpose
。 >
lst.transpose.map(v=>if(v.exists(_!=v.head))
(Expression1 in terms of elements in v)
else (Expression2 in terms of elements in v) )
在Scala REPL中:
为,
val lst = List(List(1, 0, 0), List(1, 1, 0), List(1, 0, 1))
scala> lst.transpose.map(v=>if(v.forall(_==v.head)) v.sum*0.5+1 else v.sum*0.5)
res23: List[Double] = List(2.5, 0.5, 0.5)
scala> lst.transpose.map(v=>if(v.exists(_!=v.head)) v.sum*0.5 else v.sum*0.5+1)
res24: List[Double] = List(2.5, 0.5, 0.5)
scala> lst.transpose.map(v=>if(v.find(_!=v.head)!=None) v.sum*0.5 else v.sum*0.5+1)
res25: List[Double] = List(2.5, 0.5, 0.5)
答案 2 :(得分:0)
您可以使用地图和图案匹配
val list = List(List(1, 0, 0), List(1, 1, 0), List(1, 0, 1))
val result = list.transpose.map {
case sublist if sublist.forall(sublist.head == _) => 1+0.5*sublist.sum
case sublist => 0.5*sublist.sum
}