Агрегация данных и цикл в игре + скала
Я очень новый, чтобы играть! и 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 ответ
Как насчет этого?
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))
}
}
Я не проверил внутреннюю часть цикла, но вы, кажется, не понимаете, где поставить цикл. Может быть, это также можно переписать как свернутый, чтобы получить более приятный код (насколько я понимаю, циклы обычно считаются не очень хорошими в Scala;)). Чтобы использовать функции в шаблонах, вам может понадобиться сначала импортировать их. После первой строки шаблона, где вы объявляете заголовок функции шаблона, вы можете легко импортировать такие вещи, как, например: @import java.util.Date
, Просто убедитесь, что вы импортируете правильный класс, и вы также сможете использовать функции в шаблонах.
И последнее замечание: 1 to 3
дает {1, 2, 3}
так ты обычно хочешь 1 until array.length
, как 1 until 3
дает {1, 2}
, Обычно вы можете использовать for (element <- array)
обозначение, которое легче смотреть.