在 Scala 中求和设置值
Summing Set values in Scala
我有一组元组,我想得到它的值整数部分的总和。但是,当我应用此代码时,它 returns 1,而预期为 3。我想这是因为 map
函数的结果也 returns 一个 Set
并且重复的结果被消除了。
object Main:
def main(args: Array[String]): Unit = {
val pairs = Set(("one", 1), ("two", 1), ("three", 1))
val sum = pairs.map(pair => pair._2).sum
println(sum) //returns 1
}
我的期望是基于这些东西在 Java 中的运作方式。 Set 具有不同的元素,但 Stream 在使用 distinct()
或 .collect(toSet())
之前没有。根据这个,结果是预期的 3。
import org.apache.commons.lang3.tuple.Pair;
import java.util.Set;
public class Main {
public static void main(String... args) {
var pairs = Set.of(Pair.of("one", 1), Pair.of("two", 1), Pair.of("three", 1));
var sum = pairs.stream()
.map(Pair::getRight)
.reduce(0, Integer::sum);
System.out.println(sum); //returns 3
}
}
我目前关于如何实现这样的结果 (3) 的假设是:
- 将
Set
转换为List
,但似乎不是一个好的解决方案:
val sum = List.from(pairs).map(pair => pair._2).sum
- 使用
foldLeft
:
val sum = set.foldLeft(0)((a, b) => a + b._2)
但也许还有更方便的方法?
我有一组元组,我想得到它的值整数部分的总和。但是,当我应用此代码时,它 returns 1,而预期为 3。我想这是因为 map
函数的结果也 returns 一个 Set
并且重复的结果被消除了。
object Main:
def main(args: Array[String]): Unit = {
val pairs = Set(("one", 1), ("two", 1), ("three", 1))
val sum = pairs.map(pair => pair._2).sum
println(sum) //returns 1
}
我的期望是基于这些东西在 Java 中的运作方式。 Set 具有不同的元素,但 Stream 在使用 distinct()
或 .collect(toSet())
之前没有。根据这个,结果是预期的 3。
import org.apache.commons.lang3.tuple.Pair;
import java.util.Set;
public class Main {
public static void main(String... args) {
var pairs = Set.of(Pair.of("one", 1), Pair.of("two", 1), Pair.of("three", 1));
var sum = pairs.stream()
.map(Pair::getRight)
.reduce(0, Integer::sum);
System.out.println(sum); //returns 3
}
}
我目前关于如何实现这样的结果 (3) 的假设是:
- 将
Set
转换为List
,但似乎不是一个好的解决方案:
val sum = List.from(pairs).map(pair => pair._2).sum
- 使用
foldLeft
:
val sum = set.foldLeft(0)((a, b) => a + b._2)
但也许还有更方便的方法?