scala – 用foldLeft求和
发布时间:2020-12-16 10:01:10 所属栏目:安全 来源:网络整理
导读:在这段代码中,我试图将两个字符串的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)
在这段代码中,我试图将两个字符串的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)时,应该对相应值的xor求和有效吗? 解决方法
问题是a不是元组.如果您注释传递给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是当前值.您希望累积Ints,因此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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |