Eu tenho a seguinte matriz
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
Desejo remover elementos em branco da matriz e quero o seguinte resultado:
cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Existe algum método assim compact
que o faça sem loops?
cities.reject!(&:empty?)
cities.reject!(&:blank?)
?empty?
é para matrizesblank?
está disponível apenas atravésActiveSupport
. Padrão Ruby faz usoString#empty?
: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3Freject
é melhor do quereject!
porque[].reject!(&:empty?)
retornosnil
,[].reject(&:empty?)
retornos[]
fonte
blank?
é uma boa escolha, mas é umrails
método, e esta pergunta é sobre a planícieruby
Aqui está o que funciona para mim:
resultado:
fonte
:blank?
é específico do Rails.NoMethodError: undefined method empty? for nil:NilClass
,:blank?
é melhor que:empty?
:blank
funciona melhor que:empty
. Porque:empty
não funciona paranil
No meu projeto eu uso
delete
:fonte
Quando eu quero arrumar uma matriz como esta, eu uso:
Isso removerá todos os elementos em branco ou nulos.
fonte
Mais explícito
Isso removerá os
nil
valores e os valores vazios de string (""
).Por exemplo:
fonte
Tente o seguinte:
fonte
Use
reject
:fonte
reject(&:empty?)
,.nil.empty?
booom break!reject(&:empty?)
com,compact
por exemplo,[nil, ''].compact.reject(&:empty?)
O motivo pelo qual você deseja usar
blank?
maisempty?
é que o espaço em branco reconhece nada, cadeias vazias e espaços em branco. Por exemplo:ainda retornaria:
E chamando
empty?
no" "
retorno vontadefalse
, que você provavelmente vai querer sertrue
.Nota:
blank?
só é acessível através do Rails, o Ruby suporta apenasempty?
.fonte
Já existem muitas respostas, mas aqui está outra abordagem, se você estiver no mundo do Rails:
fonte
present?
vem deActiveSupport
. Isso tem uma tag no Rails, e exigir uma gema extra para um método parece excessivo.Aqui está mais uma abordagem para alcançar esse objetivo.
nós podemos usar
presence
comselect
fonte
" "
elementos em minha matriz que não foram removidos com o método rejeitar. Seu método removidonil
""
ou" "
itens.Aqui está uma solução se você tiver tipos mistos em sua matriz:
Solução:
Resultado:
fonte
Você pode tentar isso
fonte
cities.reject!(&:blank?)
fonte
Maneira mais curta
cities.select(&:present?)
fonte
outro método:
fonte
Atualize com um rigoroso com
join
&split
O resultado será:
Observe que: isso não funciona com uma cidade com espaços
fonte