CyberZHG
本帖最后由
展开Biu

本帖最后由 CyberZHG 于 2014-8-20 20:49 编辑

empty

[查看全文]
CyberZHG
本帖最后由
展开Biu

本帖最后由 CyberZHG 于 2014-8-20 20:49 编辑

empty

[查看全文]
CyberZHG
毫无意义的Fib楼
展开Biu

The 1st Fib mod 1000000007: 1

The 2nd Fib mod 1000000007: 2

The 3rd Fib mod 1000000007: 3

The 4th Fib mod 1000000007: 5

The 5th Fib mod 1000000007: 8

The 6th Fib mod 1000000007: 13

The 7th Fib mod 1000000007: 21

The 8th Fib mod 1000000007: 34

The 9th Fib mod 1000000007: 55

The 10th Fib mod 1000000007: 89

[查看全文]
ID:L1
日记2012年8月21日 第六九天
展开Biu

本帖最后由 ID:L1 于 2012-8-23 18:29 编辑

悲剧的日子 电脑坏了。。。坑爹朋友的约会搞的我又不能学习C++

[查看全文]
Richeir
【抱歉贴】我最近真的太忙了
展开Biu

新工作有3个月的试用期,工作的内容比之前的多了非常多..

我之前是做桌面端开发的,现在转向了Web开发,需要复习还有学习的东西非常多...昨天因为一个 Ajax异步上传图片再回传 的问题我就搞了整整一天,还加班了1个小时...还好最后完成了..

这段时间可能没有多少精力和空闲去管理 研究记录 ,但是希望大家能多来这里玩~

签到贴完每天都会签到的~

以上~

[查看全文]
CyberZHG
本帖最后由
展开Biu

本帖最后由 CyberZHG 于 2014-2-15 11:29 编辑

test

[查看全文]
CyberZHG
本帖最后由
展开Biu

本帖最后由 CyberZHG 于 2014-8-20 20:56 编辑

empty

[查看全文]
轻舟过
【Ruby】3.1 数据类型(一):数值、字符串、数组
展开Biu

本帖最后由 轻舟过 于 2012-8-21 11:08 编辑

本文介绍下Ruby中几种基本数据类型:整数、浮点数、字符串,例子的代码基本来自《The Ruby Programming Language》一书

整数


Ruby中有两种类型用来表示整数,分别是Fixnum和Bignum,Ruby会自动会在两种类型之间切换,所以基本可以不用管。

下面的都是整数,输入很长很长一串数字都没关系哦。

[mw_shl_code=ruby,true]0

123

12345678901234567890[/mw_shl_code]

在数字很大的时候,往往很难看清到底有多少位数字,Ruby支持用下划线分隔数字,来达到增强可读性的目的,比如:

[mw_shl_code=ruby,true]1_000_000_000 #10亿[/mw_shl_code]

(PS:这里的#以及后面的内容为注释,解释器会忽略注释的内容,但是对人类来说,注释能使程序更容易读懂)

当然Ruby也支持用二进制、八进制和十六进制来表示整数,分别以0、0b、0x为前缀,如下:

[mw_shl_code=ruby,true]0377 # 255的八进制表示

0b1111_1111 # 255的二进制表示

0xFF # 255的十六进制表示[/mw_shl_code]

浮点数


浮点数可以用普通的方法或者科学计数法来表示,科学计数法采用<浮点数x>e<整数y>的形式,表示x乘以10的y次方

[mw_shl_code=ruby,true]0.0

-3.14

6.02e23 # 表示 6.02 × 1023

1_000_000.01 # 100万多0.1[/mw_shl_code]

字符串


Ruby里字符串的表示花样繁多,有用单引号的,有用双引号的,也有用%q的,还有一种叫“Here documents”的东西(不知道该怎么翻译)

单引号


最简单的就是用单引号括起来的字符串了,如下所示:

[mw_shl_code=ruby,true]'This is a simple Ruby string literal'[/mw_shl_code]

如果要在字符串里使用单引号字符的话需要在单引号前加一个\,比如:

[mw_shl_code=ruby,true]'Won\'t you read O\'Reilly\'s book?'[/mw_shl_code]

如果想要用\字符又该怎么办呢,答案就是在\前面再加一个\,比如:

[mw_shl_code=ruby,true]'This string literal ends with a single backslash: \\'

'This is a backslash-quote: \\\''

'Two backslashes: \\\\'[/mw_shl_code]

不过,如果\的后面既不是\,也不是',其实不用写成\\,直接写\就可以了,比如字符串'a\b'与'a\\b'是等价的。

如果要写多行的字符串,只要跨多行写就行了。

[mw_shl_code=ruby,true]'This is a long string literal

that includes a backslash and a newline'[/mw_shl_code]

上面的那种写法,第一行的末尾literal后面会有一个换行符,如果纯粹是因为字符串太长想分割成几行写,并不想加换行符,可以用下面的写法:

[mw_shl_code=ruby,true]message =

'These three literals are '\

'concatenated into one by the interpreter. '\

'The resulting string contains no newlines.'[/mw_shl_code]

双引号


双引号表示的字符串更加灵活,它可以用许多的转义字符,比如\n代表换行符,比如\t代表制表符,当然如果要使用"符号,也要写成\"的形式

它还有一个强大的功能是可以对变量进行计算然后替换,比如下面的语句会计算2*Math::PI,然后把结果替换到字符串中,最终字符串的结果如右边注释所示。

[mw_shl_code=ruby,true]"360 degrees=#{2*Math::PI} radians" # "360 degrees=6.28318530717959 radians"[/mw_shl_code]

这样的话,如果确确实实要表示一个#的话,你就得在它前面加个\,变成\#的形式,比如:

[mw_shl_code=ruby,true]"Use \#{ to interpolate expressions" [/mw_shl_code]

多行字符串的形式与上一节的是类似的,比如

[mw_shl_code=ruby,true]"This string literal

has two lines \

but is written on three"[/mw_shl_code]

稍微有点区别的是它可以使用\后面跟一个换行符,这样换行符就不会出现在字符串中,比如上面的结果是literal后面有换行符,而two lines后面没有换行符。

%字符串和Here document就略过吧~

字符串操作


可以用+运算符来进行字符串的连接,比如:

[mw_shl_code=ruby,true]planet = "Earth"

"Hello" + " " + planet # 得到 "Hello Earth"[/mw_shl_code]

用<<运算符来将第二个字符串拼接到第一个字符串的末尾,这和+运算符的区别是,+是不会改变变量的值的,它将结果以一个新的字符串对象的形式返回,而<<会改变原有的变量的值,比如下面的代码:

[mw_shl_code=ruby,true]greeting = "Hello"

greeting + " " + "World"

puts greeting # 输出 "Hello"

greeting << " " << "World"

puts greeting # 输出 "Hello World"[/mw_shl_code]

可以用*运算符表示字符串的重复,比如:

[mw_shl_code=ruby,true]ellipsis = '.'*3 # 得到 '...'[/mw_shl_code]

可以访问字符串的单个元素,下标是从0开始的,所以s[0]访问的是字符串从左边数第一个字符,另外ruby还支持用负数下标反向访问字符串的元素,下标从-1开始,s[-1]访问的是s的倒数第一个字符,s[-2]访问的是s倒数第二个元素,依次类推,比如下面的代码:

[mw_shl_code=ruby,true]s = 'hello'; # Ruby 1.9

s[0] # 'h': 字符串的第一个字符(其实是单个字符的字符串)

s[s.length-1] # 'o': 最后一个字符 'o'

s[-1] # 'o': 访问最后一个字符的另外一种方法

s[-2] # 'l': 倒数第二个字符

s[-s.length] # 'h': 访问第一个字符的临一中方法

s[s.length] # nil: 这个下标没有元素[/mw_shl_code]

还可以进行赋值(注:在1.9中?H与'H'是等价的):

[mw_shl_code=ruby,true]s[0] = ?H # 将第一个字符替换成大写的 H

s[-1] = ?O # 将最后一个字符替换成大写的 O

s[s.length] = ?! # 错误![/mw_shl_code]

当然也可以将空字符串和多个字符的字符串赋给某个下标,比如:

[mw_shl_code=ruby,true]s = "hello"

s[-1] = "" # 删除最后一个字符; s现在为"hell"

s[-1] = "p!" # 将最后一个字符改成p!,s现在为"help!"[/mw_shl_code]

可以访问字符串中的一段子字符串,如s[0,2]第一个数字表示起始的位置,第二个数字表示子字符串的长度,一些例子:

[mw_shl_code=ruby,true]s = "hello"

s[0,2] # "he"

s[-1,1] # "o"

s[0,0] # "": 长度为0的子字符串总是为空

s[0,10] # "hello": 返回整个字符串

s[s.length,1] # "": 字符串结束的地方有一个空字符串

s[s.length+1,1] # nil: 读的位置越界了[/mw_shl_code]

当然不仅可以访问,也可以赋值:

[mw_shl_code=ruby,true]s = "hello"

s[0,1] = "H" # 将第一个字符替换成大写的H

s[s.length,0] = " world" # 通过给字符串的最后赋值的形式将一个字符串拼接到末尾

s[5,0] = "," # 插入一个逗号

s[5,6] = "" # 删除; s == "Hellod"[/mw_shl_code]

还有另外一种形式访问或赋值一段子字符串,采取s[0..1]或者s[0...1]的形式,第一个数字表示起始的位置,第二个数字表示结束的位置,两个点和三个点的区别是三个点是不包括第二个数字的下标的,而两个点包括第二个数字的下标,看几个例子就明白了:

[mw_shl_code=ruby,true]s = "hello"

s[2..3] # "ll": 字符 2 and 3

s[-3..-1] # "llo": 用负数的下标也行

s[0..0] # "h":

s[0...0] # "": 空字符串

s[2..1] # "": 同样为空

s[7..10] # nil: 范围超出了字符串的边界

s[-2..-1] = "p!" # 替换:s变成 "help!"

s[0...0] = "Please " # 插入:s变成 "Please help!"

s[6..10] = "" # 删除: s变成 "Please!"[/mw_shl_code]

数组


数组就是一堆东西的集合,比如:

[mw_shl_code=ruby,true][1, 2, 3] # 包含3个Fixnum的数组

[-10...0, 0..10,] # 包含2个Range对象的数组; 允许末尾有逗号

[[1,2],[3,4],[5]] # 包含数组的数组

[x+y, x-y, x*y] # 数组的元素可以使任意表达式

[] # 没有任何元素的空数组[/mw_shl_code]

可以用Array.new来创建一个新数组并进行初始化,比如:

[mw_shl_code=ruby,true]empty = Array.new # []: 返回一个空数组

nils = Array.new(3) # [nil, nil, nil]: 创建一个包含3个nil的数组

zeros = Array.new(4, 0) # [0, 0, 0, 0]: 包含4个0的数组

copy = Array.new(nils) # 为已经存在的数组创建一个副本

count = Array.new(3) {|i| i+1} # [1,2,3]: 包含3个由下标计算得到的元素的数组[/mw_shl_code]

数组下标的操作和字符串是完全一样的,所以就略过了,它也支持用+来拼接两个数组,比如:

[mw_shl_code=ruby,true]a = [1, 2, 3] + [4, 5] # [1, 2, 3, 4, 5]

a = a + [[6, 7, 8]] # [1, 2, 3, 4, 5, [6, 7, 8]][/mw_shl_code]

数组和数组之间可以使用减法,a - b表示从a里面去掉在b里面出现的元素,比如:

[mw_shl_code=ruby,true]['a', 'b', 'c', 'b', 'a'] - ['b', 'c', 'd'] # ['a', 'a'][/mw_shl_code]

数组的<<运算符与字符串略有不同,它被用来将一个元素加到一个数组的末尾,比如:

[mw_shl_code=ruby,true]a = [] # 从空数组开始

a << 1 # a 为 [1]

a << 2 << 3 # a 为 [1, 2, 3]

a << [4,5,6] # a 为 [1, 2, 3, [4, 5, 6]][/mw_shl_code]

*运算符:

[mw_shl_code=ruby,true]a = [0] * 8 # [0, 0, 0, 0, 0, 0, 0, 0][/mw_shl_code]

数组还支持的两个操作是可以对两个数组求交与并,两个数组的交就是在两个数组中都出现了的元素,并则是在其中一个数组中出现的元素,比如:

[mw_shl_code=ruby,true]a = [1, 1, 2, 2, 3, 3, 4]

b = [5, 5, 4, 4, 3, 3, 2]

a | b # [1, 2, 3, 4, 5]: 两个数组的并,重复的元素被移除了

b | a # [5, 4, 3, 2, 1]: 相同的元素,不同的顺序

a & b # [2, 3, 4] 两个数组的交

b & a # [4, 3, 2][/mw_shl_code]

[查看全文]