使用列表作为输入在scala中运行函数

时间:2017-10-19 17:47:51

标签: scala intellij-idea user-defined-functions scala-collections

我对Scala非常高兴,所以我要做的是执行一个函数,该函数将先前创建的列表作为参数获取。然后我通过整个列表读取小写的每个元素来查找关键字。

最后,我计算这个单词的次数并返回值。我的项目是作为Scala类创建的,顺便说一句,在我的代码中,它似乎是小写的,它不能读取小写中的每个列表元素。

如果我将所有代码移到一个有效的函数之外,但我不明白为什么在函数方法中它不会通过。

请伙计们,帮我解决一下,谢谢 AU

代码:

object practiqueI extends App{
//exercise 1
/*  val liste = List(15,39,22,98,37,19,5)
  var z : Int = 0

  for (i <- liste){

    z = z + i
  }

  println("the total is:",z)*/

//exercise 2
  val list_txt = List("Introduction à la programmation ",
    "Practique de la programmation",
    "Structure de données",
    "principe de la programmation",
    "Algorithme","Langages de programmation")


  def wordrepeted(some: _*) : Int =  {
    var  counter_word:Int = 0
    var counter_nword: Int =0
    val word_cle: String = "programmation"
    var exist_word: Boolean = false

    for (i <- some) {
      var test: String = i.toLowerCase
      if (test.contains(word_cle)) {
        counter_word +=  1
        exist_word = true
       } else {
         counter_nword += 1
      }
    }
    return counter_nword
  }

  wordrepeted(list_txt)

}

1 个答案:

答案 0 :(得分:3)

好吧,首先,如果您想要获取字符串列表的方法,那么它应该如下所示:

def myMethod(someList: List[String]) = {...}

其次,scala的List提供了查看find()exist()count()等元素的方法。我强烈建议您使用它们。这些方法将布尔函数作为参数。铁。检查列表是否包含包含某个子字符串的元素将如下所示:

someList.exists(s => s.contains("programmation"))

计算包含该子字符串的元素非常相似:

someList.count(s => s.contains("programmation"))

第三件事,你不需要在Scala中使用return语句,最后一个表达式被视为返回值。

所以基本上计算包含子字符串的元素的方法看起来像是:

def countElements(allElements: List[String], substring: String): Int = 
    allElements.count(s => s.toLowerCase.contains(substring.toLowerCase))

看起来你对其他编程语言有一些经验,但Scala对你来说很新鲜。在进行这样的练习之前,我真的建议您阅读一些教程,例如:https://www.tutorialspoint.com/scala/index.htm只是为了了解Scala中有些东西是如何工作的,因为它有很多语法糖和有用的“快捷方式”。