scala - Change sorting order with parameters -
i tried create output film list different sorting order (depending on parameter type in), parameter doesn't work. error: value sorting not fellow member of scala.movie
def printresult(list: list[movie], sorting : string) = { val movielist = list.filter(element => element.isinstanceof[movie]) if (movielist.length > 0) { val resultsize = chooseresultsize() val sizedlist = movielist.filter(element => movielist.indexof(element) < resultsize) val formtlength = sizedlist.map(_.title.length).max + 9 val printpattern = "%-" + formtlength + "s" println(s"\n$printpattern %-9s %-9s %-9s".format("title", "year", "votes", "rating")) (movie <- ((for (film <- sizedlist) yield film.asinstanceof[movie]).sortby(_.sorting).reverse)) println(s"$printpattern %-9s %-9d %-9.1f".format(movie.title.trim, movie.year, movie.votes, movie.rating)) } else println("sorry - no matches found!") }
sortby function waits function (scala.movie) => b. so, can't pass string value indicates field want sort by, have pass function.
val movies = (movie <- (film <- sizedlist) yield film.asinstanceof[movie]) yield film val sortedmovies = (sorting match { case "byyear" => movies.sortby(_.year) case "byvotes" => movies.sortby(_.votes) case _ => movies.sortby(_.title) }).reverse sortedmovies foreach(movie => println(s"$printpattern %-9s %-9d %-9.1f".format(movie.title.trim, movie.year, movie.votes, movie.rating))) scala sorting
No comments:
Post a Comment