답변:
이 작업을 수행하는 방법에는 여러 가지가 있습니다. reject
noEmptyCities = cities.reject { |c| c.empty? }
을 사용 reject!
하면 cities
제자리에서 수정 됩니다. cities
무언가를 거부하거나 거부하지 않으면 반환 값으로 반환 됩니다 nil
. 조심하지 않으면 문제가 될 수 있습니다 (댓글에서 지적한 ninja08 덕분에).
cities.reject!(&:blank?)
? empty?
배열입니다
blank?
통해서만 이용할 수 있습니다 ActiveSupport
. 표준 Ruby는 다음을 사용합니다 String#empty?
: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3F
reject
더 나은보다 reject!
때문에 [].reject!(&:empty?)
반환 nil
, [].reject(&:empty?)
반환[]
여기 나를 위해 일하는 것이 있습니다 :
[1, "", 2, "hello", nil].reject(&:blank?)
산출:
[1, 2, "hello"]
:blank?
은 Rails 전용입니다.
NoMethodError: undefined method empty? for nil:NilClass
, :blank?
보다 더:empty?
:blank
보다 잘 작동합니다 :empty
. :empty
작동하지 않기 때문에nil
이 배열을 정리하고 싶을 때 사용합니다.
["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - ["", nil]
이것은 모든 공백 또는 nil 요소를 제거합니다.
cities.delete_if(&:blank?)
nil
값과 빈 문자열 ( ""
) 값 이 모두 제거 됩니다.
예를 들면 다음과 같습니다.
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal", nil]
cities.delete_if(&:blank?)
# => ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
이 시도:
puts ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - [""]
사용 reject
:
>> cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].reject{ |e| e.empty? }
=> ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
reject(&:empty?)
.
nil.empty?
붐 브레이크!
reject(&:empty?)
와 compact
예[nil, ''].compact.reject(&:empty?)
cities.reject! { |c| c.blank? }
사용하려는 이유 blank?
이상은 empty?
그 빈은 전무, 빈 문자열 및 공백을 인식하고 있습니다. 예를 들면 다음과 같습니다.
cities = ["Kathmandu", "Pokhara", " ", nil, "", "Dharan", "Butwal"].reject { |c| c.blank? }
여전히 돌아올 것입니다 :
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
그리고 호출 empty?
에 " "
의지 반환 false
당신은 아마되고 싶어요 true
.
참고 : blank?
Rails를 통해서만 액세스 할 수 있습니다 empty?
. Ruby 만 지원합니다 .
이미 많은 답변이 있지만 Rails 세계에 있다면 다른 접근법이 있습니다.
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].select &:present?
present?
에서 온다 ActiveSupport
. 이것은 Rails 태그가 없으며 한 가지 방법으로 여분의 보석이 필요합니다.
다른 방법 :
> ["a","b","c","","","f","g"].keep_if{|some| some.present?}
=> ["a","b","c","f","g"]
join
& 로 엄격한 업데이트split
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
cities.join(' ').split
결과는 다음과 같습니다.
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
참고 : 공백이있는 도시에서는 작동하지 않습니다.
cities.reject!(&:empty?)