String Scala理解错误

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

我正在做一些exercism.io练习。我目前正在做的是Scala DNA练习。以下是我收到的代码和错误:

作为参考,DNA用一个链字符串实例化。这种DNA可以调用count(计算通过的单核苷酸的链数)和nucletideCounts,计算链中每个核苷酸的所有出现次数,并返回
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{n
for{ n好!我喜欢这个简洁的解决方案。为什么在这种情况下并行解决方案会更优化?我在执行的过程中没有实现很多并行性,所以很好奇.PAR命令是如何在字符串对象调用上工作的。谢谢!@ imcPHER Scala字符串配备了有序的集合方法,因此字符串使用这些集合方法。用PAR,我们得到了一个集合的并行版本,之后我们可以并行地对集合中的每一个项目应用重计算。这可能会对非常大的计数感兴趣,尽管需要非常大的集合。非常感谢您对此的询问:“不用担心,谢谢您给出如此深刻的答案!如果您是“不知道为什么……”不要回答,也不要误导其他人。
def nucleotideCounts() = strand.groupBy(identity).mapValues(_.length)
strand.distinct.par.map( n => n -> count(n) )