信息的阵列如何可以BUIT使用两个阵列如下的数组:创建与包含在其他两个阵列
名称= [A,B,C]
how_many_of_each [3,5,2]
得到
my_array = [A,A,A,b,b,b,b,b,C,C]
信息的阵列如何可以BUIT使用两个阵列如下的数组:创建与包含在其他两个阵列
名称= [A,B,C]
how_many_of_each [3,5,2]
得到
my_array = [A,A,A,b,b,b,b,b,C,C]
使用zip
,flat_map
和阵列乘法:
irb(main):001:0> value = [:a, :b, :c]
=> [:a, :b, :c]
irb(main):002:0> times = [3, 5, 2]
=> [3, 5, 2]
irb(main):003:0> value.zip(times).flat_map { |v, t| [v] * t }
=> [:a, :a, :a, :b, :b, :b, :b, :b, :c, :c]
name.zip(how_many_of_each).inject([]) do |memo, (x, y)|
y.times { memo << x}
memo
end
=> [:a, :a, :a, :b, :b, :b, :b, :b, :c, :c]
编辑:哦,还有更好的,看到@大卫格雷森。
这将做到这一点在一个易于理解的方式:
my_array = []
name.count.times do |i|
how_many_of_each[i].times { my_array << name[i] }
end
为简单起见,有些事情可以说。 –
array = ["a", "b", "c"]
how_many = [2, 2, 2]
result = []
array.each_with_index do |item, index|
how_many[index].times { result << item }
end
print result # => ["a", "a", "b", "b", "c", "c"]
你可以选择你想要的(只是交换了意见#
):
class Array
def multiply_times(how_many)
r = []
#how_many.length.times { |i| how_many[i].times { r << self[i] } }
self.each_with_index { |e, i| how_many[i].times { r << e } }
r
end
end
p ['a', 'b', 'c'].multiply_times([3, 5, 2])
#=> ["a", "a", "a", "b", "b", "b", "b", "b", "c", "c"]
这是一个很酷为自己练习。谢谢。 – Agis