2012-10-02 83 views
5

信息的阵列如何可以BUIT使用两个阵列如下的数组:创建与包含在其他两个阵列

名称= [A,B,C]

how_many_of_each [3,5,2]

得到

my_array = [A,A,A,b,b,b,b,b,C,C]

+0

这是一个很酷为自己练习。谢谢。 – Agis

回答

11

使用zipflat_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] 
+0

这个解决方案和ksol的解决方案使用:一个,而不是一个,如果以后我想将变量/常量链接到一个图像文件,会产生什么影响? – Jay

+0

以及我如何给创建的数组命名?很多thx – Jay

+0

'my_array = value.zip(次).flat_map {| v,t | [v] * t}' –

3
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] 

编辑:哦,还有更好的,看到@大卫格雷森。

2

这将做到这一点在一个易于理解的方式:

my_array = [] 
name.count.times do |i| 
    how_many_of_each[i].times { my_array << name[i] } 
end 
+0

为简单起见,有些事情可以说。 –

1
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"] 
1

你可以选择你想要的(只是交换了意见#):

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"]