String Scala理解错误
我正在做一些exercism.io练习。我目前正在做的是Scala DNA练习。以下是我收到的代码和错误: 作为参考,DNA用一个链字符串实例化。这种DNA可以调用count(计算通过的单核苷酸的链数)和nucletideCounts,计算链中每个核苷酸的所有出现次数,并返回String Scala理解错误,string,scala,yield,for-comprehension,String,Scala,Yield,For Comprehension,我正在做一些exercism.io练习。我目前正在做的是Scala DNA练习。以下是我收到的代码和错误: 作为参考,DNA用一个链字符串实例化。这种DNA可以调用count(计算通过的单核苷酸的链数)和nucletideCounts,计算链中每个核苷酸的所有出现次数,并返回Map[Char,Int] class DNA(strand:String) { def count(nucleotide:Char): Int = { strand.count(_ == nucleotide
Map[Char,Int]
class DNA(strand:String) {
def count(nucleotide:Char): Int = {
strand.count(_ == nucleotide)
}
def nucleotideCounts = (
for {
n <- strand
c <- count(n)
} yield (n, c)
).toMap
}
类DNA(链:字符串){
def计数(核苷酸:字符):Int={
链计数(==核苷酸)
}
def核苷酸计数=(
为了{
n对于
理解,如错误消息所指出的,对定义了flatMap
和map
方法的可遍历对象进行操作
在您的例子中,count
返回一个简单的整数,因此无需对其进行“迭代”,只需将其添加到结果集中即可
for {
n <- strand
} yield (n, count(n))
管道解决方案如下所示:
def nucleotideCounts() = strand.groupBy(identity).mapValues(_.length)
根据AkOS的方法,考虑给定串的并行遍历(<代码>字符串< /代码>),
在这里,我们使用distinct收集独特的项目,并在Map
中构建每个Map
关联,另一种方法是
Map()++{for(nc}
不知道为什么它与{…}.toMap()不同,但它完成了任务
另一种方法是
Map()++{for(n太棒了,谢谢!我知道这很简单。Scala是一种奇怪的语言,一开始让你感到困惑,但这是有意义的。我感谢你的帮助!关于你的编辑,将其设置为相等。toSet,我现在收到以下错误:错误:(9,7)缺少参数类型n Hm,它应该能够确定这是一组Char
,您可以尝试显式键入它:.toSet[Char]
我明确说明了n:Char,它修复了它,只是好奇为什么它没有像你提到的那样找出类型。你的修复也可以。谢谢!不,n
将是字符串中的每个Char
。你自己试试:for{nfor{ n好!我喜欢这个简洁的解决方案。为什么在这种情况下并行解决方案会更优化?我在执行的过程中没有实现很多并行性,所以很好奇.PAR命令是如何在字符串对象调用上工作的。谢谢!@ imcPHER Scala字符串配备了有序的集合方法,因此字符串使用这些集合方法。用PAR,我们得到了一个集合的并行版本,之后我们可以并行地对集合中的每一个项目应用重计算。这可能会对非常大的计数感兴趣,尽管需要非常大的集合。非常感谢您对此的询问:“不用担心,谢谢您给出如此深刻的答案!如果您是“不知道为什么……”不要回答,也不要误导其他人。
def nucleotideCounts() = strand.groupBy(identity).mapValues(_.length)
strand.distinct.par.map( n => n -> count(n) )