当前位置:  开发笔记 > 编程语言 > 正文

计算字符串重复SCALA的次数

如何解决《计算字符串重复SCALA的次数》经验,为你挑选了1个好方法。

嗨我正试图获得艺术家名称在某些年份重复的次数,我有这个

var artists=Array.ofDim[String](994,2)//artist,year
var artists2=Array.ofDim[String](250)//artist name
var artists3 = Array.ofDim[Int](250)//number of times 

并且用户必须输入ano1和ano2,它们是我们想要的年份保证金

val loop = new Breaks;
  for(i <- 0 to 993){//copiamos
      loop.breakable{
        for(j<- 0 to 249){
            if(artists2(j).contentEquals("NULL") && artists(i)(1).toInt>=ano1 && artists(i)(1).toInt<=ano2){
              artists2(j)=artists(i)(0)
              artists3(j)= 1
              loop.break;
            }else if(artists(i)(0).contentEquals(artists2(j)) && artists(i)(1).toInt>=ano1 && artists(i)(1).toInt<=ano2){
              artists3(j)= artists3(j)+1
              loop.break;

            }

        }
       }
  }

 println(artists2.mkString("\n")) 
 println(artists3.mkString(","))

由于某种原因,我输入if后无法正常工作或j自我添加1因为每次都在artists2中创建一个新元素而不是将其添加到artists3

我得到的输出是艺术家3填充1,因为由于某种原因它永远不会检查if的其他部分



1> jwvh..:

如果这听起来有点苛刻,我很抱歉,但是你的代码有很多问题,很难知道从哪里开始.

主要问题是1)你的代码不是很像scala,2)你正在使用数据结构和变量名来设计使事情尽可能难以理解.

这是重新设计事物的简短尝试.它可能无法满足您的所有要求,但它可能会让您朝着更好的方向前进.

val mockdata = List( ("Tom", 2001)
                   , ("Sue", 2002)
                   , ("Joe", 2002)
                   , ("Sue", 2005)
                   , ("Sue", 2004)
                   , ("Jil", 2001)
                   , ("Tom", 2005)
                   , ("Sue", 2002)
                   , ("Jil", 2012)
                   )

def countArtists( dataSet: List[(String,Int)]
                , anoStart: Int , anoEnd: Int): Map[String,Int] = {
  val artists = for {
    (artist, year) <- dataSet
    if year >= anoStart && year <= anoEnd
  } yield artist
  artists.distinct.map(name => name -> artists.count(_ == name)).toMap
}

val count2002to2011 = countArtists(mockdata, 2002, 2011)

此时,您可以使用结果获取有趣的信息.

scala> count2002to2011.keys // all artists within the time period
res0: Iterable[String] = Set(Sue, Joe, Tom)

scala> count2002to2011.values.sum // total count within the time period
res1: Int = 6

scala> count2002to2011("Sue") // count for just this artist
res2: Int = 4

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有