首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Ruby中的字符串上应用除法操作符?

如何在Ruby中的字符串上应用除法操作符?
EN

Stack Overflow用户
提问于 2016-03-02 03:07:17
回答 5查看 517关注 0票数 1

我试图将除法运算符/添加到String中,这需要一个整数。

运算符应该生成一个字符串数组。数组的大小是给定的整数,其元素是原始字符串的子字符串,因此当按顺序连接时,产生原始字符串。

如果字符串长度不能被整数整除,则某些子字符串应该比其他字符长(一个字符)。两个字符串的长度不应超过一个,任何较长的字符串都应出现在较短的字符串之前。

如下所示:

代码语言:javascript
运行
复制
"This is a relatively long string" / 7
# => ["This ", "is a ", "relat", "ively", " lon", "g st", "ring"]

我怎么开始?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-03-02 08:10:03

你可以使用递归。

代码语言:javascript
运行
复制
class String
  def /(n)
    return [self] if n==1
    m = (self.size.to_f/n).ceil
    [self[0...m]].concat(self[m..-1] / (n-1))
  end
end

str = "This would be a woefully short string had I not padded it out."

str / 7
  # => ["This woul", "d be a wo", "efully sh", "ort strin", "g had I n",
  #     "ot padded", " it out."] 


(str / 7).map(&:size)
  #=> [10, 10, 9, 9, 9, 9, 9]
票数 2
EN

Stack Overflow用户

发布于 2016-03-02 06:29:26

代码语言:javascript
运行
复制
class String
  def /(num)
      n, rem = self.size.divmod(num)
      p = 0
      res = []
      rem.times{res << self[p..p+n]; p+=n+1} 
      (num-rem).times{res << self[p...p+n]; p+=n}
      res
  end
end

p "This is a relatively long string" / 7
代码语言:javascript
运行
复制
["This ", "is a ", "relat", "ively", " lon", "g st", "ring"]
票数 2
EN

Stack Overflow用户

发布于 2016-03-02 08:47:46

这样做是可行的:

代码语言:javascript
运行
复制
class String
  def /(n)
    chars.in_groups(n).map(&:join) 
  end
end

"This is a relatively long string" / 7
#=> ["This ", "is a ", "relat", "ively", " lon", "g st", "ring"]

in_groups是将数组分成n组的Rails方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35737748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档