Reading Notes
这些时间在读《松本行弘的程序世界》,看到里面有关于字符串,编码和正则式等,有挺多是之前不知道的。
sort 与 sort_by 区别
sort
每次都会执行块处理,如上面的代码,每次比较都要进行整数转换,比较浪费资源,而且不是线性增长的。
sort_by
用执行块的代码所生成的结果进行排序,对每个元素只执行一次块的调用。但会占用更多的内存:ary.sort_by{|x| x.to_i}
Encoding
Unicode 5.0 已经收入9万多字,已经超出了65536的范围。
UTF-8 作为可变长的,与 ASCII 具有兼容性的字符编码方式。将 ASCII 字符串当做 UTF-8 字符串来处理也不会有问题。
几乎多有情况下,文本数据都不附带文字编码方式的信息,所以容易引起错误。
使用 UCS 方式的编程语言会在输入输出时对文本做统一处理。
Ruby 使用 CSI,不会对文本做任何处理,成为少有的例外。
Regex
- 后面跟一个
?
就会进行懒惰匹配(第一次与模式匹配时就停止检索)。 (.)\1
是指匹配两个相同的字符,在后面使用匹配的字符串称为向后引用。|
与其他正则表达式元素比,优先级要低,yes|no
会解释为yes
或者no
(不同于ye(s|n)o
的匹配结果)。- 匹配文件路径时会有很多的
/
要转义,即要写成\/
,使用%r{}
可以避免,{}
可以换成别的,成对出现就可:%r!/usr(/local)?/bin!
。 $&
最后的匹配字符串- $` 位于匹配前的字符串
$'
位于匹配后的字符串$+
匹配最后括号的字符串$n
匹配第n个括号内的字符串\&
或\0
整个匹配部分的字符串
RSA
(后来我认真搜了一下发现还是有一些数学理论的,感觉要自己写代码生成密钥还是挺复杂的)
这是一个RSA加密的小程序,
现实中pq的长度为1024位(二进制),这里并不考虑效率
(pq, e) 为公钥,(pq, d) 为私钥
p,q为两个素数