Arrays 修改Ruby方法,将整数分区表示为有序字符串(没有扁平化?)

Arrays 修改Ruby方法,将整数分区表示为有序字符串(没有扁平化?),arrays,ruby,methods,formatting,Arrays,Ruby,Methods,Formatting,我写这篇文章是为了帮助改进下面的Ruby方法,将一个整数分区(表示为n个整数的数组11=[5,1,5])转换为由1和0组成的字符串,其中1表示单位或记号,0表示算术分隔符+。返回的最后一个字符串在任何位置基系统中都不能作为数字读取,尽管它可能是 例如,我想将由数组11=[5,1,5]表示的整数11转换为11111 01011111,它表示11=11111+1+11111或11。因为顺序很重要,所以11=[5,5,1]表示一个不同的分区,即11111 011111101 与示例中一样,传递给该方法

我写这篇文章是为了帮助改进下面的Ruby方法,将一个整数分区(表示为n个整数的数组11=[5,1,5])转换为由1和0组成的字符串,其中1表示单位或记号,0表示算术分隔符+。返回的最后一个字符串在任何位置基系统中都不能作为数字读取,尽管它可能是

例如,我想将由数组11=[5,1,5]表示的整数11转换为11111 01011111,它表示11=11111+1+11111或11。因为顺序很重要,所以11=[5,5,1]表示一个不同的分区,即11111 011111101

与示例中一样,传递给该方法的整数数组没有排序,因此该方法应该按照给定的部分顺序使用分隔符返回表示

在下面的方法中,我使用另一个临时数组从给定的分区数组构建了表示,然后在返回中使用了flatte,我想知道如何使用Ruby更好地处理这个问题

这是我试过的。我很感激你能帮我改进这段代码。特别是,我希望得到关于如何展平最终数组的反馈,并学习如何避免使用连接,直接构建字符串而不使用临时数组

def partition_to_string(n)
  representation = []
  n.each_with_index do |partition,index|
    if index == n.size - 1 then
      representation << [Array.new(partition,"1")]
    else 
      representation << [Array.new(partition,"1"),"0"]
    end
  end
  return representation.flatten.join
end

puts partition_to_string([11])
#=> "11111111111"
puts partition_to_string([5,1,5])
#=> "1111101011111"
puts partition_to_string([5,5,1])
#=> "1111101111101"
对于将一个数字分成1部分的简单划分,即一个仅由1组成的字符串,例如,11=[11]该字符串不需要任何零,因为它仅由1部分组成,所以我想将其表示为简单的[11]=11111111 1。同样,在由多个部分组成的分区中,对于最终的求和,不需要在最后附加0。也就是说,该方法应该返回[5,1,5]=11111 01011111,而不是11111 010111110。我想我在上面的代码中处理了这些情况,在数组中循环并用传递的初始数组的大小检查当前元素。

您可以使用and:

So[5,1,5].map{n|1*n}.join0=>11111011111

考虑到[1]。join0=>1

您可以使用和:

So[5,1,5].map{n|1*n}.join0=>11111011111


考虑到[1].join0=>1

这正是我搜索的简单Ruby答案。谢谢你的快速回答。这正是我一直在寻找的简单的Ruby答案。谢谢你的快速回答。分两步完成会变得更容易:1将[5,1,5]转换为[11111,1,11111],2使用0作为分隔符连接后者。分两步完成会变得更容易:1将[5,1,5]转换为[11111,1,11111],2使用0作为分隔符连接后者。
ary.map { |n| "1" * n }.join("0")