配列がある場合:array = ["ruby", "code", "library"]
。一致する/ ^ライブラリ$ /要素を先頭に移動するにはどうすればよいですか?配列は次のようになります:array = ["library"、 "ruby"、 "code"]rubyソート配列 - 一致した要素を先頭に移動
答えて
これはいくつかの方法で実行できます。これは単なる好奇心のうち1
array = ["ruby", "code", "library"]
array.partition { |element| element.match /^library$/ }.flatten
[Enumerable#partition](http://ruby-doc.org/core-2.2.0/Enumerable.html#method-partition)は注文を保存するかもしれませんが、ドキュメントはそれを無視しています。 –
def move_to_front(arr, pattern)
mi = matching_indices(arr, pattern)
return arr unless mi
a = arr.dup
mi.reverse_each.with_object([]) { |i,b| b.unshift(a.delete_at(i)) }.concat(a)
end
def matching_indices(arr, pattern)
arr.each_index.select do |i|
case pattern
when Regexp then arr[i] =~ pattern
when Proc then pattern[arr[i]]
else (arr[i] == pattern)
end
end
end
move_to_front ["ruby", "code", "library"], /\Alibrary\z/
#=> ["library", "ruby", "code"]
move_to_front ["ruby", "library", "code", "library"], "library"
#=> ["library", "library", "ruby", "code"]
move_to_front ["ruby", "libraries", "code", "library"], /librar(?:ies|y)/
#=> ["libraries", "library", "ruby", "code"]
move_to_front ["ruby", "libraries", "code", "library"], /\Alibrar/
#=> ["libraries", "library", "ruby", "code"]
move_to_front ["ruby", "libraries", "code", "library"],
->(str) { str =~ /librar(?:ies|y)/ }
#=> ["libraries", "library", "ruby", "code"]
move_to_front ("1".."9").to_a, /[13579]/
#=> ["1", "3", "5", "7", "9", "2", "4", "6", "8"]
move_to_front ("1".."9").to_a, ->(n) { n.to_i.odd? }
#=> ["1", "3", "5", "7", "9", "2", "4", "6", "8"]
move_to_front ("1".."9").to_a, ->(n) { false }
#=> ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
move_to_front ("1".."9").to_a, ->(n) { true }
#=> ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
注:
matching_indices ["ruby", "libraries", "code", "library"], /librar(?:ies|y)/
#=> [1, 3]
移動され、これらの要素の順序を保持move_to_front
方法としているもの移動されません。
3セント1セント。あなたはそれをすることもでき、この
のように二回配列変数を使用することを嫌う場合array.inject([]){|a,e| e[/^library/] ? a.unshift(e) : a<<e}
とケースアレイでは
array & ["library"] | array
は、検索要素が含まれている複数回、それは
array.find_all{ |e| e[/^library/] } + array.reject{ |e| e[/^library/] }
になります
[array].map{|a| a & ["library"] | a}.flatten
Th最後の1つ:grepを使用して
array.grep(/library/) + array.grep(/^(?!library)/)
最後のものは、あなたが思っていることをしません。 '/ [^ library] /'は、 'l'、' i'、 'b'など以外の文字を含む文字列にマッチします。おそらくあなたは'/^(?! library)/ 'を意味していますか? –
@Jordan、私はそれを知っていて、/ ^(?! library)/もっと良いと思うかもしれませんが、それは他の文字列と "library"を渡すことができるからです。 – peter
もちろん、 '' lliibbrraarryy' 'と' 'yrarbil''を使用します。 –
- 1. 配列の一部の要素を配列の先頭に移動したい
- 2. 配列要素をオブジェクトキーで先頭に移動
- 3. 配列内の要素をJavascript/AngularJSで先頭に移動
- 4. text-anchor = "start"テキスト要素をsvg要素の先頭に移動しません。
- 5. リストの要素をリストの先頭に移動する
- 6. アメリカのタイムゾーンをPHP配列の先頭に移動
- 7. javascript配列の先頭にある要素をプッシュ
- 8. Ruby要素の一致
- 9. ScrollViewの先頭に移動
- 10. 先頭からの文字列の一部に一致する
- 11. ページのスクロール時にDIV要素を先頭に移動/修正するには
- 12. フレックスボックス:リストアイテムの先頭に一致したいだけです
- 13. 配列の要素を移動する#
- 14. ネストした配列内の要素と一致する
- 15. 既存のセル配列の先頭に新しい要素を追加する
- 16. Postgresql:配列要素の先頭と末尾に%を付加します。
- 17. Perlスクリプト、#と一致する文字列を先頭に追加
- 18. 一番下のdivを先頭に移動する方法
- 19. 2次元配列の移動要素
- 20. PHP移動配列要素が
- 21. TabPages :: KeyDownで先頭にタブを移動
- 22. d3Plus凡例を先頭に移動
- 23. REGEX:文字列の先頭に一致する。
- 24. 文字列の先頭と末尾に一致するJavaパターン?
- 25. アニメーションのリスト要素を先頭に
- 26. 行列の要素の配列を一致させる
- 27. Javascriptは、文字列の先頭とアルファベット順にアルファベット順に一致します。
- 28. ページ移動時にJquerymobileのフッターがページの先頭に移動
- 29. awk配列の要素の数のパターンが一致します
- 30. numpy配列の同一要素をサブアレイに移動する方法
私はSeanの答えが良いと思いますが、 'array.sort {| str | str.match(/^library $ /)? 0:1} ' –