Ruby 在答案中添加一些可能有用的内容。感谢您提出这个问题@Сццццццц,您希望在块之外创建范围,以避免生成多个相同范围,循环的每次迭代一个。@mwp查看for范围。包括?,它看起来像是O(1)因为它检测到这些是ASCII字符,可以快速执行大于/小于。谢谢你指

Ruby 在答案中添加一些可能有用的内容。感谢您提出这个问题@Сццццццц,您希望在块之外创建范围,以避免生成多个相同范围,循环的每次迭代一个。@mwp查看for范围。包括?,它看起来像是O(1)因为它检测到这些是ASCII字符,可以快速执行大于/小于。谢谢你指,ruby,string,capitalization,Ruby,String,Capitalization,在答案中添加一些可能有用的内容。感谢您提出这个问题@Сццццццц,您希望在块之外创建范围,以避免生成多个相同范围,循环的每次迭代一个。@mwp查看for范围。包括?,它看起来像是O(1)因为它检测到这些是ASCII字符,可以快速执行大于/小于。谢谢你指出这一点@mwp这绝对是一个更好的方法,谢谢你们两位改进了答案。我想知道('a'..'Z')是否也是O(1)。Ruby可能不会逐项生成整个范围,但可能只是填充开始点和结束点,并保持其状态,直到需要完全扩展(它不在include?中)。不过,我不


在答案中添加一些可能有用的内容。感谢您提出这个问题@Сццццццц,您希望在块之外创建范围,以避免生成多个相同范围,循环的每次迭代一个。@mwp查看for
范围。包括?
,它看起来像是O(1)因为它检测到这些是ASCII字符,可以快速执行大于/小于。谢谢你指出这一点@mwp这绝对是一个更好的方法,谢谢你们两位改进了答案。我想知道
('a'..'Z')
是否也是O(1)。Ruby可能不会逐项生成整个范围,但可能只是填充开始点和结束点,并保持其状态,直到需要完全扩展(它不在
include?
中)。不过,我不是100%肯定这一点;可能有时间深入了解一下源代码。@ggorlen我同意正则表达式可能是一个更好的选择,我选择这个版本的主要原因是因为这个问题还要求一种访问字符串部分的方法,所以我尝试在答案中添加一些可能有用的内容。感谢您提出这个问题@Сццццццц,您希望在块之外创建范围,以避免生成多个相同范围,循环的每次迭代一个。@mwp查看for
范围。包括?
,它看起来像是O(1)因为它检测到这些是ASCII字符,可以快速执行大于/小于。谢谢你指出这一点@mwp这绝对是一个更好的方法,谢谢你们两位改进了答案。我想知道
('a'..'Z')
是否也是O(1)。Ruby可能不会逐项生成整个范围,但可能只是填充开始点和结束点,并保持其状态,直到需要完全扩展(它不在
include?
中)。不过,我不是100%肯定这一点;可能有时间深入了解源代码。“我想知道如何访问数组中每个字符串的第一个字母。”–在您的情况下,每个字符串的第一个字母总是
@
,因此您实际上不需要访问它,您已经知道它是什么。@JörgWMittag确定它是第一个字符,但是我不确定
@
是否会被视为一个字母。@SagarPandya在编程环境中,任何字符集中有映射的东西都是一个字符。这包括不同的字母、数字、符号和特殊字符,没有像空格这样的字形。因此,是的,该数组中任何字符串的第一个字符都是@。“我想知道如何访问数组中每个字符串的第一个字母。”–在您的情况下,每个字符串的第一个字母总是
@
,因此您不需要访问它,您已经知道它是什么。@JörgWMittag确定它是第一个字符,但是我不确定
@
是否会被视为一个字母。@SagarPandya在编程环境中,任何字符集中有映射的东西都是一个字符。这包括不同的字母、数字、符号和特殊字符,没有像空格这样的字形。因此,是的,该数组中任何字符串的第一个字符都是@。
array = ["@user1","@User2","@uSer3","@User4"]
array.count {|e| e =~ /^@[A-Z]/}
array.select {|e| e =~ /^@[A-Z]/ }.size
array = ["@user1","@User2","@uSer3","@User4"]

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

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