チュートリアルBastards Book of Rubyを実行していますが、機能の理解に問題があります。sort_by
ここでは、運動です:Rubyでsort_by関数がどのように機能するかを理解しよう
演習:「姓」の形式で名前を表す文字列の配列、使用sort_byと最後の名前でソートされた配列を返すように分割を考えると姓で並べ替え名
。簡潔にするために、各名前はスペースで区切られた2つの単語(すなわち、「John Doe」のみであり、「Mary Jo Doe」ではない)から構成されているとします。
names = ["John Smith", "Dan Boone", "Jennifer Jane", "Charles Lindy", "Jennifer Eight", "Rob Roy"]
そしてここソリューションです:
names = ["John Smith", "Dan Boone", "Jennifer Jane", "Charles Lindy", "Jennifer Eight", "Rob Roy"]
sorted_names = names.sort_by do |name|
name.split(" ").reverse.join.upcase
end
puts sorted_names.join('; ')
# output=> Dan Boone; Jennifer Eight; Jennifer Jane; Charles Lindy; Rob Roy; John Smith
が、私はコード
sorted_names = names.sort_by do |name|
puts name.split(" ").reverse.join.upcase
end
を実行したときに、私は出力を得る、しかし:
SMITHJOHN
BOONEDAN
JANEJENNIFER
LINDYCHARLES
EIGHTJENNIFER
ROYROB
ましたputs sorted_names.join('; ')
実際にデータを操作して(したがってname.split(" ").reverse.join.upcase
)、それを新しい配列sorted_names
に保存していると思っていました。しかし明らかにそうではありません。だから、私の質問は誰かがなぜこのsort_by
メソッドがこのように動作しているのか説明してください。私はRubyには比較的新しいので、説明のためにRuby docsを調べてみましたが、見つけられませんでした。私はRubyの重要な概念を理解していないと感じ、助けや洞察力を感謝します。
理にかなっていること。私は当初、大文字の名前を期待して新しい配列の出力に驚いていましたが、今度は 'sort_by'メソッドはキーが最終的にソートされることを知っているので意味があります。洞察に感謝します – Abundnce10