배열이있는 경우 : array = ["ruby", "code", "library"]
. 일치하는/^ library $/요소를 처음으로 어떻게 이동시킬 수 있습니까? 배열은 다음과 같이 보입니다 : array = [ "library", "ruby", "code"]루비 정렬 배열 - 일치하는 요소를 처음으로 이동
답변
여러 가지 방법으로 수행 할 수 있습니다. 이것은 단지 호기심 하나
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)은 주문을 보존 할 수 있지만 해당 문서는 음소거되어 있습니다. –
이다
[:select, :reject].map do |m|
["ruby", "code", "library"].public_send(m, &(/^library/.method(:=~)))
end.reduce :|
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
는 이동하는 요소의 순서를 유지
되고 그들 움직이지 않았습니다.
1 센트 당 3 개. 당신이 할 수있는이
같은 두 배열 변수를 사용하는 싫어하면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 마지막 하나 : grep 사용하기
array.grep(/library/) + array.grep(/^(?!library)/)
마지막 하나는 당신이 생각하는대로하지 않습니다. '/ [^ library] /'는'l','i','b' 등 이외의 문자를 포함하는 문자열과 일치 할 것입니다. 아마도'/^(?! library) /'를 의미할까요? –
@Jordan, 나는 그걸 알고 있었고/^ (?! library)/더 좋을 것이라고 생각했지만, 그것은 "라이브러리"가 아닌 다른 문자열을 전달할 수 있기 때문에 효과가있다. – peter
확실하지만 일치 할 것이다. ''lliibbrraarryy''와''yrarbil ''을 사용합니다. –
- 1. 루비 정렬 배열 배열
- 2. 루비 : 예외 배열 배열 정렬
- 3. 숫자로 정렬 루비 배열
- 4. 루비 정렬 배열
- 5. 루비 배열 정렬
- 6. 루비 정렬 배열
- 7. 최소 이동 수로 배열 정렬
- 8. Javascript/AngularJS를 사용하여 배열의 요소를 처음으로 이동
- 9. 요소를 기준으로 배열 정렬
- 10. 정렬 배열 일치하는 키 위해
- 11. MIPS 어셈블리 일치하는 배열 요소를
- 12. 배열 C++의 요소를 이동
- 13. 배열 요소를 레지스터 어셈블리로 이동
- 14. 팝/루비 배열 이동 여러 번
- 15. 루비 : 2 차원 배열
- 16. 루비 : 이름 속성의 배열 후 오브젝트의 정렬 배열
- 17. 스트림을 파일의 처음으로 이동
- 18. 해시 키에서 일치하는 배열 요소를 검색하는 방법
- 19. 색인에있는 문자열을 기반으로하는 루비 정렬 배열
- 20. 정렬 배열 및 여러 조건에 고유하게 - 루비
- 21. 루비 gsub 배열 요소를 다시 포맷
- 22. 배열 루비
- 23. 루비 - 배열
- 24. "자연"정렬 루비
- 25. 배열 요소를 [1]에서 [0]으로 이동
- 26. 배열 값이 다른 배열의 키와 일치하는 배열 정렬
- 27. 루비, 고급 배열
- 28. 루비 정렬 문제
- 29. 루비 2D 배열 비교
- 30. 첫 번째 배열 요소를 기반으로 파일 정렬
Sean의 답변이 더 좋다고 생각하지만'array.sort {| str | str.match (/^library $ /)? 0 : 1}' –