我试图找出一个简单的操作,它采用(Int, Int)
元组列表并在内部乘以元组,然后对这些结果求和。例如:
val list = ((9, 4), (1, 5), (4, 6))
将评估为(36, 5, 24)
,然后评估为65.我在想我可以将列表与模式匹配作为单个元组,与之不同:
list.map{
case x => x(0)._1 * x(0)._2
}
但是这只需要第一个元组并乘以每个组件。我想我可以进行聚合,但我不知道如何处理它。
答案 0 :(得分:3)
((9,4),(1,5),(4,6))不是列表而是元组的元组
val list = List[(Int, Int)]((9, 4), (1, 5), (4, 6))
val result = list.map{ case (a, b) => a * b }.sum
答案 1 :(得分:0)
首先取所有元组并乘以组件。这可以通过使用map
来完成,sum
将单独处理每个元组。之后,在结果列表中调用val res = list.map(x => x._1 * x._2).sum
,将所有元素汇总在一起。
case
此处不需要(0)
,您无法使用find . -type f \( -name "*.jpg" \) | | sed -e 's/^[0-9]*--//g' | sort | uniq -d
,因为列表中的元素是元组,而不是列表本身。
答案 2 :(得分:0)
您可以使用ListBuffer
方式
val list = ((9, 4), (1, 5), (4, 6))
val listBuffer = new ListBuffer[Int]
for(tuple <- list.productIterator){
val (a, b) = tuple.asInstanceOf[Tuple2[Int, Int]]
listBuffer += a * b
}
应该给你
ListBuffer(36, 5, 24)
并将sum
函数称为listBuffer.sum
应该为您提供65
答案 3 :(得分:0)
以下是在collect
list
的另一种方法
scala> val list = List((9, 4), (1, 5), (4, 6))
list: List[(Int, Int)] = List((9,4), (1,5), (4,6))
scala> list.collect{
case ele => ele._1 * ele._2
}.sum
res1: Int = 65