2014-06-20 2 views
0

다른 정렬 순서 (입력 한 매개 변수에 따라 다름)로 내 영화 목록에 대한 출력을 만들려고했지만 매개 변수가 작동하지 않습니다. 오류 : 값 정렬은매개 변수가있는 정렬 순서 변경

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")) 

    for (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!") 

} 

답변

0

sortBy 기능을 사용하면 함수 (Scala.Movie) => B에서 대기 Scala.Movie의 구성원이 아닙니다. 따라서 정렬 할 필드를 나타내는 String 값을 전달할 수는 없으므로 함수를 전달해야합니다.

val movies = for (movie <- for (film <- sizedList) yield film.asInstanceOf[Movie]) yield movie 
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))) 
+0

답장을 보내 주셔서 감사합니다. 그것은 잘 작동합니다 :) –

+0

@ user3673445 당신도 그것을 해결로 표시 할 수 있습니다 :) 당신은 환영합니다. –

관련 문제