我在練習排序功能,目標是一個句子的陣列(ary)。我見過的一個示例方法是構建和使用一個塊,最后將陣列中的元素(單詞)從短到長,從a到z排列。
但是我不明白為什么這個例子中有兩個引數a和b,為什么要先找出a.length和b.length?這是原始代碼:
ary = %w(
Ruby is a open source programming language with a afocus on simplicity and productivity.
)
call_num = 0
sorted = ary.sort do |a, b|
call_num = 1
a.length <=> b.length
end
puts "Sort results: #{sorted}" #=>["a", "a", "on", "is", "and", "Ruby", "open", "with", "afocus", "source", "language", "simplicity", "programming", "productivity."]
puts "Number of array elements: #{ary.length}" #=> 14
puts "Number of calls to blocks: #{call_num}" #=>30
uj5u.com熱心網友回復:
要按長度對以下單詞陣列進行排序,Ruby 基本上必須將陣列中的每個單詞與其他單詞進行比較(請注意,這并不是排序內部的確切作業方式,但在本示例的背景關系中,我們可以假設排序是這樣作業的)。
ary = %w(
Ruby is a open source programming language with a afocus on simplicity and productivity.
)
這意味著在第一步中,Ruby 需要比較單詞Rubyandis并且必須決定如何對這兩個單詞進行排序,然后是isand a,然后是aand open。
比較的每一步中的這兩個詞是兩個塊引數a和b。a.length <=> b.length然后將告訴 Ruby 如何對這兩個引數(單詞)進行排序。
見Comparable和Enumerable#sort
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/416953.html
標籤:
上一篇:Ruby陣列-將customer_id與陣列進行比較
下一篇:Rails:多型模型,洗掉麻煩
