如何切换字符串中单词的位置?
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"]
我有一组字符串,每个字符串中至少有一个 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"]