我想转换数组
.navbar-right, .dropdown, .dropdown-menu {
width: 130px;
}
到数组
[[:name1, :value1], [:name2, :value2]]
这样做的最佳方式是什么?
答案 0 :(得分:5)
各种选择(每个版本后跟短糖):
# Create a new array of swapped elements
my_array = my_array.map{ |a| a.reverse }
my_array = my_array.map(&:reverse)
# Mutate the existing array with swapped elements
my_array.map!{ |a| a.reverse }
my_array.map!(&:reverse)
# Mutate the elements in the existing array
my_array.each{ |a| a.reverse! }
my_array.each(&:reverse!)
第一个选项是最安全的',因为没有修改现有数组(如果你有其它不应该更改的引用)。
第二个选项与第一个选项大致相同,除非您有两个my_array
的引用,并希望其中一个未被修改。
第三种选择是最具破坏性的&#39 ;;对成对元素的每个引用都将被更改。但是,它也是最节省内存的,因为没有创建新的数组。
答案 1 :(得分:2)
非常有趣的回答(像rubik的立方体一样旋转矩阵):
array = [[:name1, :value1], [:name2, :value2]]
array.transpose # [[:name1, :name2], [:value1, :value2]]
.reverse # [[:value1, :value2], [:name1, :name2]]
.transpose
#=> [[:value1, :name1], [:value2, :name2]]
另一种方式(不是那么有趣且显而易见,但仍然可能):
array.inject(&:zip).reverse.inject(&:zip)
#=> [[:value1, :name1], [:value2, :name2]]
答案 2 :(得分:0)
另一种方法是使用to_h
to_a
:
array = [[:name1, :value2], [:name2, :value2]]
array.to_h # {name1: :value1, name2: :value2}
.invert # {value1: :name1, value2: :name2}
.to_a # [[:value1, :name1], [:value2, :name2]]