pol*_*tti 3 ruby string append add fizzbuzz
运行方法fizzbuzz1产生一个100个成员的数字1到100的列表,其中3的每个倍数被"fizz"替换,5个被"buzz"替换,3个和5的每个倍数被"fizzbuzz"替换:
def fizzbuzz1()
result = Array.new(100, "")
result.each_index do |index|
value = index + 1
result[index] += "fizz" if value % 3 == 0
result[index] += "buzz" if value % 5 == 0
result[index] = "#{value}" if result[index].size == 0
end
end
2.0.0-p195 :055 > fizzbuzz1
=> ["1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz", ...and so on.
Run Code Online (Sandbox Code Playgroud)
但每个开关+=的<<产量意想不到的事情:
def fizzbuzz2()
result = Array.new(100, "")
result.each_index do |index|
value = index + 1
result[index] << "fizz" if value % 3 == 0
result[index] << "buzz" if value % 5 == 0
result[index] = "#{value}" if result[index].size == 0
end
end
2.0.0-p195 :057 > entire_fizzbuzz2_result = fizzbuzz2
2.0.0-p195 :058 > entire_fizzbuzz2_result[5]
=> "fizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzz"
Run Code Online (Sandbox Code Playgroud)
最特别的是,我也注意到如果我拿出这条线:result[index] = "#{value}" if result[index].size == 0给:
def fizzbuzz3()
result = Array.new(100, "")
result.each_index do |index|
value = index + 1
result[index] << "fizz" if value % 3 == 0
result[index] << "buzz" if value % 5 == 0
end
end
2.0.0-p195 :062 > store_fizzbuzz3 = fizzbuzz3
2.0.0-p195 :063 > store_fizzbuzz3.reject { |each| store_fizzbuzz3[0] == each }
=> []
Run Code Online (Sandbox Code Playgroud)
这必须意味着fizzbuzz3返回一个100个成员数组,其中每个元素都相同,并具有以下特征:
2.0.0-p195 :066 > store_fizzbuzz3[1]
=> "fizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzz"
2.0.0-p195 :067 > store_fizzbuzz3[1].size
=> 212
2.0.0-p195 :068 > store_fizzbuzz3[1].size / 4
=> 53
Run Code Online (Sandbox Code Playgroud)
53是一个有趣的数字,因为它是1到100之间的整数,不能被3或5整除...即完全运行的fizzbuzz1顶部结果中的"数字"的数量.
这里发生了什么<<,有人可以给我一点演练吗?
这里有两个相互作用的事项:
Array.new(),和在您使用的表单中,Array.new(100, "")创建一个包含100个元素的Array,每个元素都指向相同的空字符串. +=返回一个新字符串,这没关系. <<附加到现有的字符串,因此它们都是相同的.
如果您result使用以下形式初始化Array.new():
result = Array.new(100){""}
Run Code Online (Sandbox Code Playgroud)
然后fizzbuzz2将按预期工作,因为你有100个不同的空字符串.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |