需要帮助从管道分隔的文本文件中提取数据

时间:2016-06-28 18:01:55

标签: ruby

这是我的阵列:

http://imdb.com/title/tt0111161/?ref_=chttp_tt_1|The Shawshank Redemption|1994|USA|1994-10-14|Crime,Drama|142 min|9.3|Frank Darabont|Tim Robbins,Morgan Freeman,Bob Gunton
http://imdb.com/title/tt0068646/?ref_=chttp_tt_2|The Godfather|1972|USA|1972-03-24|Crime,Drama|175 min|9.2|Francis Ford Coppola|Marlon Brando,Al Pacino,James Caan
....., etc. (250 films)

我的代码,它给了我哈希:

file = IO.read("movies.txt")
new_arr = file.split("\n")
new_xd = new_arr.map{ |e| s = e.split("|")
 {url: s[0], title: s[1], Year: s[2], Country: s[3], Full_Year: s[4], 
 Genre: s[5], Time: s[6],Rating: s[7], Director: s[8], Actor: s[9]}
}

我想列出所有独特的导演,并按姓氏的字母顺序对结果进行排序。我很难找到按姓氏排序的方法。有没有人有建议?

2 个答案:

答案 0 :(得分:0)

您可以使用此代码获取导演的唯一名称。如果电影可以有多个导演,您可能希望使用split(',')单独处理它们。

new_xd.map { |movie| movie[:Director].split(',') }.flatten.uniq

答案 1 :(得分:0)

http://ruby-doc.org/core-2.3.1/Enumerable.html#method-i-sort_by可以帮助您:

pry(main)> new_xd.map{|movie| movie[:Director].split(',')}.flatten.uniq.sort_by{|director_full_name| director_full_name.split(' ').last}
=> ["Francis Ford Coppola", "Frank Darabont"]