数据聚合和for play + scala中的循环

时间:2013-02-10 03:49:14

标签: json scala playframework playframework-2.0

我很新玩!和scala,我正在尝试解析由json对象组成的数组。我需要遍历数组,计算每个对象中特定事件的数量,添加它们并将它们传递给html索引。这是我的控制器粗略的样子:

object Application extends Controller {

def stringArray=<array of strings, each a JSValue>

    var counter=0

for(i<-0 to stringArray.length){
    counter+=(((Json.parse(stringArray(i))\"some_element").toString()).count(y=>y=="some_keyword"))
}

def index = Action {
    Ok(views.html.index(counter))
}
}

但实际上没有办法在应用程序控制器中实现for循环。我试图将数组传递给索引,但其他scala函数,如Json.parse和count似乎无法识别html模板。什么是可能的解决方法?

1 个答案:

答案 0 :(得分:0)

这个怎么样?

object Application extends Controller {

    val stringArray=<array of strings, each a JSValue>

    def index = Action {
        var counter = 0
        for(s<-stringArray){
            counter+=(((Json.parse(s)\"some_element").toString()).count(y=>y=="some_keyword"))
        }
        Ok(views.html.index(counter))
    }
}

我没有检查循环的内部部分,但你似乎对放置循环的位置感到困惑。也许这也可以重写为折叠以获得更好的代码(据我所知,for循环在Scala中通常被认为不太好;))。要使用模板中的功能,您可能需要先导入它们。在模板的第一行(声明模板函数标题)之后,您可以轻松导入类似的内容:@import java.util.Date。只需确保导入正确的类,您也应该能够使用模板中的函数。

最后说明:1 to 3提供了{1, 2, 3},因此您通常需要1 until array.length,因为1 until 3{1, 2}。通常,您可以使用for (element <- array)表示法,这更容易查看。