2016-04-19 21 views
1

Ich versuche eine Zeichenfolge in ein Array zu verwandeln, das zuerst nach absteigender Länge sortiert wird, dann durch absteigende alphabetische Reihenfolge unter Strings ähnlicher Länge. Das heißt, "x ya yz z" sollte ["yz", "ya", "z", "x"] zurückgeben. Ich sehe, dass eine analoge Frage in python gestellt wurde. Was wäre der Rubinweg?Ruby sortiere Array nach Länge dann alphabetisch

verstehe ich die Saite mit

string = 'Joe John Bill Juan Bill' 

x = string.split.sort_by(&:length).reverse.uniq 

Antwort

3

Dies sollte funktionieren nach absteigend Länge sortiert werden: mit der Größe und der String selbst wie folgt verwenden

string.split.sort_by { |e| -e.length }.group_by(&:length).map{ |_, v| v.sort.reverse }.flatten 
3

Gerade Array#sort:

array = 'Joe John Bill Juan Bill' 
array.split(' ').sort { |a, b| [b.size, b] <=> [a.size, a] } 
#=> ["Juan", "John", "Bill", "Bill", "Joe"] 
1
"x ya yz z".split.sort_by{|s| [s.length, s]}.reverse 
# => ["yz", "ya", "z", "x"] 
Verwandte Themen