2016-11-13 7 views
3

最後の文字で単語の配列を並べ替えることを試みています。最後の文字で単語の配列を並べ替える

def array_sort_by_last_letter_of_word(array) 
    list = array[-1,1] 
    list.sort { |a,b| b <=> a } 
end 

puts array_sort_by_last_letter_of_word ['sky', 'puma', 'maker'] 

出力はちょうど"maker"です。

+0

問題を最もよく解決する回答を選択して受け入れてください。このようにして、あなたの問題が解決されたことをコミュニティに知らせるとともに、時間を費やしてくれた人たちの努力に報いることもできます。 –

答えて

6
def array_sort_by_last_letter_of_word(array) 
    array.sort_by { |word| word[-1] } 
end 

String#lastを使用して)Railsのバージョン:

def array_sort_by_last_letter_of_word(array) 
    array.sort_by(&:last) 
end 
+0

乾杯Andrey。ありがとうございました。 – AltBrian

+0

@AltBrianいいえprobs! –

+0

AltBrian、Railsでこれを行う場合は、 'word.last'を使うことができます:)。 @Andrey普通のRubyで 'String#first'、' String#last'を取得すると思いますか? –

1

アンドレイの答えは間違いなくこれを行う方法です。しかし、あなたのコードで何が問題になっているのかを理解するには:

list = array[-1,1] 

この構文は、配列のサブ配列を取得するためのものです。パターンはarray[start, length]で、インデックスstartから始まり、長さがlengthである配列を取得します。したがって、長さが1-1(最後のインデックスを意味する)から始まる配列、つまり配列の最後の要素だけを要求しています。だからlast = ['maker']。そのため、あなたのソートメソッドはその要素を返すだけです。

あなたがの内側にもaニーズがそうでない場合は、アレイがでソートされ、bの左されることに注意して文字列が

array.sort { |a,b| a[-1] <=> b[-1] } 

を比較する方法を決定するものであるソートブロックを、最後の文字 を取得したいです逆。

+1

'sort'は' sort_by'よりも汎用性がありますが、多くの場合、 'sort_by'で十分であり、' sort'よりはるかに高速です。 – Amadan

関連する問題