gpt4 book ai didi

scala - 使用 foldLeft 求和

转载 作者:行者123 更新时间:2023-12-01 01:56:18 25 4
gpt4 key购买 nike

在这段代码中,我试图对两个 Strings 的 xor 值求和:

val s1 = "1c0111001f010100061a024b53535009181c";
val s2 = "686974207468652062756c6c277320657965";
val zs : IndexedSeq[(Char, Char)] = s1.zip(s2);
zs.foldLeft(0)((a , b) => (a._1 ^ a._2) + (b._1 ^ b._2))

我收到错误消息:
value _1 is not a member of Int
[error] zs.foldLeft(0)((a , b) => (a._1 ^ a._2) + (b._1 ^ b._2))
[error] ^
[error] one error found
[error] (test:compileIncremental) Compilation failed
[error] Total time: 2 s, completed Oct 20, 2016 12:51:11 PM

当我折叠时 (Char, Char)对相应值的异或求和是否有效?

最佳答案

问题是a不是 Tuple .如果您注释传递给 foldLeft 的函数你应该看到问题:

val s1 = "1c0111001f010100061a024b53535009181c";
val s2 = "686974207468652062756c6c277320657965";
val zs : IndexedSeq[(Char, Char)] = s1.zip(s2);
val sum = zs.foldLeft(0)((a: Int , b: (Char, Char)) => a + (b._1 ^ b._2))

请记住 a是累加器和 b是当前值。您要积累 Int如此 a必须与您指定的种子类型相同 ( 0 )。

当然,您可以在没有显式注释的情况下编写上述内容:
zs.foldLeft(0)((a, b) => a + (b._1 ^ b._2))

更简单的方法是事先将其映射到 Int,然后使用 sum功能:
val sum = s1.zip(s2)
.map(cs => cs._1 ^ cs._2)
.sum

关于scala - 使用 foldLeft 求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40153750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com