如何使用元素和从每个元素派生的其他变量迭代数组

时间:2015-08-13 20:20:54

标签: ruby-on-rails arrays ruby each

我正试图找到一种单行或更好的方式来获取scopescope_capitalized。我该怎么办?

  • 我需要scopescope_capitalized分配
  • 实例化变量不是一个选项
到目前为止

代码

['users', 'companies'].each do |scope|
  scope_capitalized = scope.capitalized
  # do stuff with scope and scope_capitalized
end

# if I had ['users', 'companies'] in a variable 'a' I could do
a.zip(a.map(&:capitalized)).each do |scope, scope_capitalized|

4 个答案:

答案 0 :(得分:2)

根据您打算如何处理数据,您可能会执行以下操作:首先创建包含对的数组:

terms = ['users', 'companies']
terms_with_capitals = terms.map{ |scope| [scope, scope.capitalized] }
terms_with_capitals # => [['users', 'Users'],['companies','Companies']]

答案 1 :(得分:1)

['users','companies'].map(&:capitalize)将返回一系列大写项目作为单行。但是,如果你正在努力做什么"做什么"使用大写的字符串,单行可能不是一个好主意,因为你可能最终得到一个非常长,难以理解的事物链。白色空间不需要任何费用,可读性总是有利的。坦率地说,我会做这样的事情:

%w(users companies).map(&:capitalize).each do |scope|
  # do scope stuff
end

答案 2 :(得分:1)

您的问题包含您真正需要的所有信息。你说:

# if I had ['users', 'companies'] in a variable 'a' I could do
a.zip(a.map(&:capitalized)).each do |scope, scope_capitalized|

然后只需将您的数组放在a

的位置
['users', 'companies'].zip(['users', 'companies'].map(&:capitalized)).each do |scope, scope_capitalized|

答案 3 :(得分:1)

 <div id="footer" data-tracking-area="footer" style="display:none;"> 

这绕过了实例化