如何切换字符串中单词的位置?

How do I switch the positions of words within a string?

我有一组字符串,每个字符串中至少有一个 space。对于数组中的每个元素,我想 tkae 字符串的最后一部分并将其放在开头。因此,例如,如果我的数组中有这个

["RUBY RAILS"]

我希望结果是

["RAILS RUBY"]

我试过了

data.map! {|str| "#{str.split(/\s+/).last} #{str.split(/\s+/).first}" }

但唯一的问题是,如果字符串有两个以上的单词,上述方法将不起作用。如果一个字符串有两个以上的单词,比如

["ONE TWO THREE"]

我希望结果是

["THREE ONE TWO"]

但是我上面的函数并没有这样做。我怎样才能改变我的功能,让它这样做?

您正在寻找 Array#rotate:

["ONE TWO THREE"]
  .map(&:split)               #=> [["ONE", "TWO", "THREE"]]
  .map { |ar| ar.rotate(-1) } #=> [["THREE", "ONE", "TWO"]]
  .map { |ar| ar.join(' ') }     #=> ["THREE ONE TWO"]