Удаление пробелов, вкладок и новых строк из массива - PullRequest
0 голосов
/ 25 февраля 2019

Как мне удалить вкладки, новые строки и пробелы из этого массива?

array1 = ["E", "A", "C", "H", " ", "L", "I", "N", "E", " ", "E", "N", "D", "S", " ", "W", "I", "T", "H", " ", "A", " ", "A", "C", "C", "I", "D", "E", "N", "T", "A", "L", "L", "Y", " ", " ", "A", "D", "\"", "A", " ", "A", "C", "C", "I", "\n", "\""]

Я пробовал следующее, и, похоже, ни одна из них не работает должным образом.

array1.map!(&:strip)

array1.reject!(&:empty?)

array1.reject(&:empty?)

array1 - [""]

array1.delete_if {|x| x == " " } 

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Кроме того, только другие возможные варианты:

array1 = [" ", "A", "\n", "\t", "B", "\r"]
array1.delete_if { |s| s.match? /\s/ }
#=> ["A", "B"]
array1 = [" ", "A", "\n", "\t", "B", "\r"]
array1.keep_if { |s| !s.match? /\s/ }
#=> ["A", "B"]
array1 = [" ", "A", "\n", "\t", "B", "\r"]
array1.select! { |s| !s.match? /\s/ }
#=> ["A", "B"]

Использование match? вместо match предпочтительнее не только потому, что мы не используем MatchData.

Дело в том, что тест показывает, что match? почти в 2 раза быстрее.

Это может быть важно при работе с большими объемами данных.

0 голосов
/ 25 февраля 2019

Вы можете использовать grep, чтобы выбрать элементы, соответствующие шаблону.Этот шаблон может быть простым регулярным выражением , например /\s/, который соответствует пробельным символам:

array1.grep(/\s/)
#=> [" ", " ", " ", " ", " ", " ", " ", " ", "\n"]

В результате получается массив со всеми элементами, содержащий хотя бы один пробельный символ.

Также есть \S (верхний регистр), который соответствует непробельным символам:

array1.grep(/\S/)
#=> ["E", "A", "C", "H", "L", "I", "N", "E", "E", "N", "D", "S", "W",
#    "I", "T", "H", "A", "A", "C", "C", "I", "D", "E", "N", "T", "A",
#    "L", "L", "Y", "A", "D", "\"", "A", "A", "C", "C", "I", "\""]

И у нас есть grep_v, который является инвертированной версией grep.Это было бы полезно, если вы хотите явно указать пробел, табуляцию и символ новой строки:

array1.grep_v(/[ \t\n]/)
#=> ["E", "A", "C", "H", "L", "I", "N", "E", "E", "N", "D", "S", "W",
#    "I", "T", "H", "A", "A", "C", "C", "I", "D", "E", "N", "T", "A",
#    "L", "L", "Y", "A", "D", "\"", "A", "A", "C", "C", "I", "\""]
0 голосов
/ 25 февраля 2019
array1 = ["E", " ", ":", "L", "É", "\t", "T",
          "-", "H", "\n", "\""]

array1.reject { |s| s.match? /\s/ }
  #=> ["E", ":", "L", "É", "T", "-", "H", "\""]

\s в регулярном выражении соответствует всем пробельным символам, а именно пробелам, символам табуляции ("\t"), новым строкам ("\n"), возвратам каретки ("\r") и фидам форм ("\f").

Последние два берут свое начало с тех дней, когда использовались телетайпные машины, возврат каретки - это движение печатающей головки от конца к началу строки, а подача бумаги вперед по бумаге печатается на одну строку. 1

1 Microsoft Windows по-прежнему распознает возврат каретки и форм-фид, тем самым поддерживая поддержку машин телетайпа.¯ \ _ (ツ) _ / ¯

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...