2017-02-12 17 views
0

私は文字列の配列を持ち、それぞれに少なくとも1つのスペースがあります。私は文字列の最後の部分をつかんで、配列のすべての要素の先頭に入れたいと思います。だから私は私の配列文字列内の単語の位置を切り替えるにはどうすればよいですか?

["RUBY RAILS"] 

でこれを持っている場合たとえば、私は結果が

["RAILS RUBY"] 

になりたい私はこの

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

を試みたが、唯一の問題は、ifという文字列です。 2つ以上の単語を持っていると、上記は機能しません。文字列が

["ONE TWO THREE"] 

のように、二つ以上の単語を持っている場合、私はreusltが

["THREE ONE TWO"] 

になりたいだろうが、私の上記の機能はそれをしません。これを行うために私の機能をどのように変更することができますか?

答えて

2

あなたは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"] 
+0

ありがとうございました。文字列を単語に分割するために正規表現を使用する必要がないことがわかりました。自動分割は通常のスペースに対してのみ行われるのでしょうか、それとも他のタイプのスペース(改行されていないスペースなど)にも発生しますか? –

+0

@Natalia何を使うべきかについては、[String# 'split'](https://ruby-doc.org/core-2.2.0/String.html#method-i-split)を参照してください。 regexはあなたが何かより複雑なものを得ることを知っていればOKです。私の例では、 '.map {| string | string.split(/ \ s + /)} ' –

+0

ありがとうございました。また、 "| ar | join( '')"おそらく "| ar | ar.join( '')" –

関連する問題