Ruby 找出数组中有多少个元素包含数字
我试图找出Twitter句柄数组中有多少个元素包含一个数字,但我想不出来 我试过这个:Ruby 找出数组中有多少个元素包含数字,ruby,Ruby,我试图找出Twitter句柄数组中有多少个元素包含一个数字,但我想不出来 我试过这个: users = ["@jcunniet","@PaulLampon","@Aziliz31","@ssoumier","@marionsouzeau","@gaellombart","@bendarag" ...] n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] puts " #{users.sum { |s| s.count(n.to_s) }} handle contain a
users = ["@jcunniet","@PaulLampon","@Aziliz31","@ssoumier","@marionsouzeau","@gaellombart","@bendarag" ...]
n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
puts " #{users.sum { |s| s.count(n.to_s) }} handle contain a number"
实际上,有一种非常简单的方法可以扫描列表并查看有多少字符串至少包含一个数字:
users = %w[ @jcunniet @PaulLampon @Aziliz31 @ssoumier @marionsouzeau @gaellombart @bendarag ]
users.grep(/\d/)
# => ["@Aziliz31"]
现在,如果您想知道有多少,在计数方面:
puts '%d handle contain a number' % users.grep(/\d/).length
/\d/
是一个正则表达式。这些可能会变得非常复杂,但这只是一个“数字”的意思。正则表达式的功能非常强大,所以不要被它们吓倒,花点时间学习它们的工作原理可以得到像这样非常紧凑的解决方案
您的原始代码中有很多内容似乎是基于错误的假设。例如,请参见n.to_s
的功能:
n= [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
n.to_s
# => "[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]"
这是一个非常难看的字符串,无法使用它,因为该字符串永远不会出现在Twitter句柄中
同样地,sum
想要把事情累加起来,尽管这里似乎没有必要,因为没有什么可添加的
Ruby有很多工具可以帮助您。第一个挑战是缩小使用范围,选择合适的。下一步是扩展您的工具,以包括更奇特的工具,如
sum
。一步一步地做,你会没事的。要计算数组中满足特定条件的元素数,请与检查条件的块一起使用:
users = ["@jcunniet", "@PaulLampon", "@Aziliz31", "@ssoumier", "@marionsouzeau", "@gaellombart", "@bendarag"]
users.count {|user| user =~ /[0-9]/ }
# => 1
这比像Array#grep
这样的方法更可取,因为它不会初始化中间数组
请参见repl.it:使用简单的方法链
在Ruby中,您可以使用方法链来返回由找到的元素数。例如:
users.grep(/\d/).count
#=> 1
当然还有其他方法来执行此任务,但此代码简短、简单且易于阅读。在这种情况下,链接方法似乎比将块传递给#count方法更符合逻辑和习惯用法,但这完全取决于您真正试图在代码中表达的内容的语义
包括Unicode支持
不太美观,但包括Unicode支持:
users.grep(/\p{Nd}/).count
#=> 1
这对于您提供的示例并不重要,但在实际代码中可能很重要,特别是当数组是动态构建的或包含经过清理的用户输入时。我建议创建一个“谓词”(返回布尔值的函数),可以测试一个句柄,以查看它是否包含数字。然后,在代码中使用该谓词。谢谢!救了我的命太棒了!谢谢你,伙计!这正是我下一步练习所需要的哈哈