gpt4 book ai didi

ruby - 逐行连接两个多行字符串

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:05 25 4
gpt4 key购买 nike

我有两个多行字符串(代表 ASCII charts )。我想将它们连接起来,以便它们并排。

例如:

s1 = "aaaa
a
aaaa"
s2 = "bbb
bbbb"
puts s1.multi_concat(s2)
#=> aaaa
#=> a bbb
#=> aaaa bbbb

如上所示,我希望它们底部对齐。我试过这个:

class String
def multi_concat(s2)
lines.map(&:chomp).zip(s2.lines.map(&:chomp)).map(&:join).join("\n")
end
end

但它存在三个问题:

  • 这两个 block 是顶部对齐的。
  • block 之间没有间距。
  • 短行转移内容:
#=> aaaabbb
#=> abbbb
#=> aaaa

如何“ block 连接”它们?

最佳答案

这是一个强大的多行连接器,它支持:

  • 用于连接两个 block 的任意字符串
  • 顶部、底部和中间对齐
class String
def multi_concat(str2,options={})
options[:pad] ||= ''
options[:align] ||= :top

chomped1, chomped2 = [self,str2].map{ |s| s.lines.map(&:chomp) }
template = "%-#{chomped1.map(&:length).max}s#{options[:pad]}%s"
delta = chomped2.length - chomped1.length
unless delta==0
shorter = delta>0 ? chomped1 : chomped2
delta = delta.abs
padding = ['']*delta
case options[:align]
when :top then shorter.concat(padding)
when :bottom then shorter.unshift(*padding)
when :middle
s1,s2 = *padding.each_cons((delta/2.0).ceil)
shorter.unshift(*s2)
shorter.concat(s1)
end
end
chomped1.zip(chomped2).map{ |a| template % a }.join("\n")
end
end

在行动中:

a = "aaa\naaaa"
b = "bbbb\n\n\nbb"
puts a.multi_concat( b )
#=> aaa bbbb
#=> aaaa
#=>
#=> bb

puts a.multi_concat( b, pad:' -> ' )
#=> aaa -> bbbb
#=> aaaa ->
#=> ->
#=> -> bb

puts a.multi_concat( b, pad:' ', align: :bottom )
#=> bbbb
#=>
#=> aaa
#=> aaaa bb

puts a.multi_concat( b, pad:' ', align: :middle )
#=> bbbb
#=> aaa
#=> aaaa
#=> bb

puts b.multi_concat( a, pad:' ' )
#=> bbbb aaa
#=> aaaa
#=>
#=> bb

关于ruby - 逐行连接两个多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com