在Ruby中,#sum
用于计算
- 数组的和
- 基于函数或条件的数组的和
- 字符串(非字符数组(中
ASCII
码点(ord
(的总和,即'abcd'.sum # => 394
第三个问题是以下
对于下面的字符串,
AwotIJHOAIJSRoieJHOjasOIADaoiHAOHJAOIJGOIajdOIQWJTOIGJDOINCOIASORIOGIMAOIMEORIQEMOIGMEOIFMASKDJQOWJGOJOASJOIQWOGIMASOIDMOQWIROQIGJOIAMSFOAIJGIHIWUNVNZMXCNXCKJQOWRIEOGSDGSPOKSDLAMKMROQIJRDFLKMZXOIAJSQPIRKLMAdglkaSFAJOIAJFOIQWJEOIQJKAMCLKACMALKSDLAKWEQANLEIRJRQFIJAOIVAWOTIJHOAIJSROIEJHOJASOIADAOIHAOHJAOIJGOIAJDOIQWJTOIGJDOINCOIASORIOGIMAOIMEORIQEMOIGMASODLQWKEJOIFJLKMALSKQIOWELKMZLXKMFALSFJQOIWEAOISFWIDHGPSODRJAWOPIJHOIDJOIAJTGIOJAORAJWOIJHOFMAOIFMOIPDMOAIPWJTOPIJDOIFjawoiRJOIpjmaioGJIGHAIJRHQHQIUEIvnaksJDNWIORQIOPEGHIDVNAJKNASIPHRQEUITHIUHDNAJSNWIHJQIWJQEOIGOIDVNAKOSDNAOPWPJQOPIWTJQEOIPGDPJFNASPJNQWOIRQWIOTOIVNAKSFNAIOAWOTIJHOAIJSROIEJHOJASOIADAOIHAOHJAOIJGOIAJDOIQWJTOIGJDOINCOIASORIOGIMAOIMEORIQEMOIGMASODLQWKEJOIFJLKMALSKQIOWELKMZLXKMFALSFJQOIWEAOISFWIDHGPSODRJAWOPIJHOIDJoiajTGIOJAORAJWOIJHOFMAOIFMOIPDMOAIPWJTOPIJDOIFJAWOIRJOIPJMAIOGJIGHAIJRHQHQIUEIVNAKSJDNWIORQIOPEGHIDVIPNWIHJQIWJQEOIGOIDVNAKOSDNAOPWPJQOPIWTJqeoIPGDPJFNASPJNQWJQWOIRJgonasKFAWOEJQWOIJOGALKFNASLFKqeqOFIJAOISFJAOISFJAWOI
它很大,(1000
个字符(,下面的程序不适用于
putc gets.upcase.sum/~/$/
它适用于所有其他较小尺寸的字符串。以上的输出必须是K
。但显示9
但是如果我做这个
putc gets.upcase.chars.sum(&:ord)/~/$/
显示K
。但是前一个为所有其他字符串提供了正确的输出,除了像这样的大字符串。
这里怎么了?
编辑:在线试用链接
在线试用!
字符串(非字符数组(中ASCII码点(ord(的总和,即"abcd"。Sum#=>394
实际上,我以前从未听说过String#sum
,尽管我对这门语言相当熟悉。所以我查了一下:
返回str中字符的基本n位校验和,其中n是可选的Integer参数,默认为16。结果只是str模
2**n - 1
中每个字节的二进制值的总和。这不是一个特别好的校验和。
当然,使用您的示例输入字符串,这就是为什么我们得到:
str.chars.map(&:ord).sum
# => 77090
str.sum
# => 11554
由于77090 > 2**15
。此外,77090 % 2**15 == 11554
。
如果您对n
使用较大的值,则(检查(和就是您所期望的:
str.sum(100)
#=> 77090