样品输入:“汽车卡车8 4巴士6 1”
样品输出:“公交车1 4卡车6 8”
如果字符串中的第n个元素是整数,则它必须保持整数, 如果它是一个单词,它必须保持一个单词
有更优雅和有效的方法吗?下面是我的红宝石代码。我正在寻找更有效的代码(不需要在ruby中)。
puts "Enter Input:"
inp = gets
inp_ary=inp.split(" ")
a=inp_ary.group_by{|i| i=~ /\d/}
sort_words = a[nil].sort
sort_integer = a[0].sort
index_words=[]
index_integer=[]
inp_ary.each_with_index do |e,i|
if e =~ /\d/
index_integer << i
else
index_words << i
end
end
final = []
sorted = sort_words + sort_integer
index_integer.each_with_index do |e,i|
final[e] = sort_integer[i]
end
index_words.each_with_index do |e,i|
final[e] = sort_words[i]
end
puts "Sorted Output: "
puts final.join(" ")
答案 0 :(得分:4)
s = "car truck 8 4 bus 6 1"
tokens = s.split
numbers, words = tokens.partition{|t| t =~ /^\d+$/}
numbers.map!(&:to_i).sort!
words.sort!
result = tokens.map{|t| (t =~ /^\d+$/ ? numbers : words).shift}.join(' ')
p result
#=> "bus car 1 4 truck 6 8"