如何计算数组中以大写字母开头的单词

How to count words in array that start with a capital letter

我正在处理一个包含 Twitter 句柄的数组,例如:

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

我想知道有多少句柄以大写字母开头。

我使用正则表达式匹配 @ 后跟字符串开头的大写字母。

count 是最具语义的函数 (感谢@crenmo):

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

select 如果您想要匹配元素列表以及(可选)大小:

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

Try it!

如果您希望匹配非英文大写字母,请使用 [[:upper:]] 而不是 [A-Z] (感谢@CarySwoveland).

作为参考,可以使用括号表示法对字符串进行索引(尽管我最终没有使用它):str[0]

尽管有一个公认的答案,但我觉得值得一提的是,使用 #count 而不是 #inject:

也可以完成同样的事情
array = ["@user1","@User2","@uSer3","@User4"]

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

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

如果将块提供给 #count 方法,它会计算块 returns 为真值的元素数。在这种情况下,如果数组的第二个字母 x[1] 是从 A 到 Z 的大写字母,则该块的计算结果为真。这是在假设数组中的每个字符串都以 "@" 开头的情况下工作的.

如果问题是 "how many in a collection" ,那么 count 很可能是要走的路。 正则表达式 /[[:upper:]]/ 的好处是它匹配 A-Z 以外的大写字母。

array = ["@user1","@User2","@uSer3","@User4"]
p array.count{|handle| handle[1].match?( /[[:upper:]]/ )}  # => 2