元组列表的总和/乘法

时间:2018-03-13 05:45:55

标签: scala list tuples

我试图找出一个简单的操作,它采用(Int, Int)元组列表并在内部乘以元组,然后对这些结果求和。例如:

val list = ((9, 4), (1, 5), (4, 6))

将评估为(36, 5, 24),然后评估为65.我在想我可以将列表与模式匹配作为单个元组,与之不同:

list.map{
   case x => x(0)._1 * x(0)._2
}

但是这只需要第一个元组并乘以每个组件。我想我可以进行聚合,但我不知道如何处理它。

4 个答案:

答案 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