Scala - 从另一个元组创建一个元组

Scala - Create a tuple from another

我想知道如何使用 map 运算符创建一个字段数与现有字段数不同的元组。

即,如果我有一个 (String, Int1, Int2) 形式的元组,我想创建一个包含 2 个字段的 (String, Int1 + Int2) 形式的元组,其中第一个字段与原始元组和第二个字段将是原始元组的第二个和第三个字段的加法。

使用模式匹配:

tuple match { case (a, b, c) => (a, b + c) }

map 不是元组的成员。如果元组是集合中的元素类型,则可以使用它。

collection map { case (a, b, c)  => (a, b + c) }

我建议使用 Shyamendra Solanki 的回答,但是为了完整起见,我想指出 Shapeless provides map and flatMap methods for tuples

对于(String,Int,Int)类型的单个元组,除了@Shyamendra Solanki提到的使用模式匹配提取值外,请注意方法_1_2_3;因此

def create(t : (String,Int,Int)) = (t._1, t._2+t._3)

也是一种可行的方法,尽管可能不那么可读。

对于给定的元组集合,还要考虑推导式 where

def create(xs : Seq[(String,Int,Int)]) = for ((s,i1,i2) <- xs) yield (s, i1+i2 )

传达了所需的语义。