如何计算数组中以大写字母开头的单词
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
如果您希望匹配非英文大写字母,请使用 [[: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
我正在处理一个包含 Twitter 句柄的数组,例如:
array = ["@user1","@User2","@uSer3","@User4"]
我想知道有多少句柄以大写字母开头。
我使用正则表达式匹配 @
后跟字符串开头的大写字母。
count
是最具语义的函数 (感谢@crenmo):
array.count {|e| e =~ /^@[A-Z]/}
select
如果您想要匹配元素列表以及(可选)大小:
array.select {|e| e =~ /^@[A-Z]/ }.size
如果您希望匹配非英文大写字母,请使用 [[: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