如何迭代一个数组及其元素和从每个元素派生的一些其他变量

How to iterate over an array with its elements and some other variable derived from each element

我正在尝试找到一种获得 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|

根据您打算如何对数据采取行动,您可以这样做,首先创建一个包含对的数组:

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

['users','companies'].map(&:capitalize) 将 return 一组大写项目作为一行。但是,如果您尝试 "do stuff" 使用大写字符串,单行代码可能不是一个好主意,因为您最终可能会得到一串很长、难以理解的东西。白色 space 不花钱,可读性总是有利的。坦率地说,我会做这样的事情:

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

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

# 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|
%w(users companies).map{|s|[s, s.capitalized]}.each do |scope, scope_capitalized|
  ...
end

这会绕过实例化