Ruby 使用其他两个数组中包含的信息创建数组

Ruby 使用其他两个数组中包含的信息创建数组,ruby,arrays,Ruby,Arrays,如何使用以下两个阵列构建阵列: 名称=[a、b、c] 每个人有多少人[3,5,2] 得到 my_array=[a,a,a,b,b,b,b,c,c]使用zip,平面地图和数组乘法: 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

如何使用以下两个阵列构建阵列:

名称=[a、b、c]

每个人有多少人[3,5,2]

得到


my_array=[a,a,a,b,b,b,b,c,c]

使用
zip
平面地图和数组乘法:

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(每个有多少个)。注入([])do | memo,(x,y)|
y、 时间{memo[:a,:a,:b,:b,:b,:b,:c,:c]

编辑:哦,还有更好的,请看@David Grayson。

这将以一种易于理解的方式完成:

my_array = []
name.count.times do |i|
    how_many_of_each[i].times { my_array << name[i] }
end
my_数组=[]
name.count.times do|i|
每个[i]有多少次{my_array
array=[“a”、“b”、“c”]
多少=[2,2,2]
结果=[]
array.each_with_index do| item,index|
多少次[索引]。{result[“a”,“a”,“b”,“b”,“c”,“c”]

您可以选择您想要的(只需交换注释
):

类数组
def乘以(多少次)
r=[]

#how|many.length.times{i | how|many[i]。times{r为了简单起见,有一些话要说。这对我来说是一个很酷的练习。谢谢。这个解决方案和ksol的解决方案使用:a而不是a,如果以后我想将变量/常量链接到图像文件,会有什么影响?
my_array=value.zip(times)。flat|map{v,t |[v]*t}
您应该了解什么是ruby符号。我们使用它们只是为了避免代码中出现未定义的变量警告,但是您可以使用
a
而不是
:a
只要您之前在某个地方定义了
a
实际上是什么就可以了。
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"]