【发布时间】:2013-04-11 01:17:09
【问题描述】:
我希望能够有一个变量“num”,我可以增加它并让它知道它的基数。
例如,如果 num 以 7 为底,等于 66,如果我做 num+= 1,则 num 应该设置为 100。
一个解决方案涉及 to_s 和 to_i,但是,有这么多的转换正在进行,它似乎不是很有效。
def increment_with_base(number, base)
number_base_ten = number.to_s.to_i(base)
number_base_ten += 1
number_base_ten.to_s(base).to_i
end
还有比这更合适的吗?是否可以告诉 Ruby 我使用的是哪个数字基数,这样我就不必进行如此多的转换?
正如我在下面的评论中提到的,我非常熟悉数字基数 - 只是不是 Ruby 中的数字基数。我实际上需要显示每个递增的数字(我会增加很多)。
如果您知道问题的答案,则无需阅读下一部分。但是,我添加它是为了澄清我为什么要做我正在做的事情。除非您想了解更多信息,否则无需阅读以下内容。
有关更多信息,我正在生成一组图,其中每个节点只有 0 或 1 个转换。每个节点由一个数字表示,特定数字表示有向边指向的其他节点。例如,数字 4.3.1.0 是一个有四个节点的图,其中第一个节点到第四个节点有一条边,第二个到第三个节点有一条边,第三个到第一个节点有一条边,第四个节点没有有任何过渡。
因此,如果我想生成所有四个节点图,其中每个节点只有一个退出边,我需要从 0.0.0.0 计数到 4.4.4.4。
【问题讨论】:
-
4.3.1.0在技术上是一个字符串标识符,而不是一个数字。您是否正在寻找一种快速枚举所有此类字符串的方法,或者您是否还需要早期的数字表示用于其他目的? -
数字的基数没有区别。Ruby 有几种不同基数的数字的文字表达式,但它们在内部只是数字。毕竟,计算机上的一切都是二进制的。当基数的不同之处在于您在谈论数字的字符串表示时,而不是数字本身。因此,如果你要以任何方式处理base,你将处理字符串,并且像
to_s、to_i这样的方法是不可避免的。