Как считать слова в массиве, которые начинаются с заглавной буквы - PullRequest
0 голосов
/ 03 октября 2018

Я работаю над массивом, содержащим такие дескрипторы Twitter, как:

array = ["@user1","@User2","@uSer3","@User4"]

Я хочу знать, сколько дескрипторов начинаются с заглавной буквы.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Несмотря на то, что есть принятый ответ, я чувствовал, что стоит упомянуть, что то же самое можно сделать, используя #count вместо #inject:

array = ["@user1","@User2","@uSer3","@User4"]

capital_letters = ('A'..'Z')

array.count {|x| capital_letters.include?(x[1])}
#=> 2

Если блок передан #count метод, он подсчитывает количество элементов, для которых блок возвращает истинное значение.В этом случае блок оценивается как true, если вторая буква массива x[1] является заглавной буквой от A до Z. Это работает в предположении, что каждая строка в массиве начинается с "@".

0 голосов
/ 04 октября 2018

Если вопрос «сколько в коллекции», то count вполне может быть подходящим вариантом.Регулярное выражение /[[:upper:]]/ имеет то преимущество, что оно совпадает с заглавными буквами, отличными от AZ.

array = ["@user1","@User2","@uSer3","@User4"]
p array.count{|handle| handle[1].match?( /[[:upper:]]/ )}  # => 2
0 голосов
/ 03 октября 2018

Я использовал регулярное выражение, чтобы соответствовать @, за которым следует заглавная буква в начале строки.

count - самая семантическая функция (спасибо @crenmo) :

array.count {|e| e =~ /^@[A-Z]/}

select полезна, если вы хотите получить список совпадающихэлементы, а также (необязательно) размер:

array.select {|e| e =~ /^@[A-Z]/ }.size

Попробуйте!

Используйте [[:upper:]] вместо [A-Z], если вы хотите, чтобы неАнглийские заглавные буквы (спасибо @CarySwoveland) .

Для справки, индексирование в строку может быть выполнено с помощью скобок (хотя я не использовал это): str[0]

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