Ruby基础知识-2.基本数据类型

1.1    整数(Integer)

整型分两种,如果在31位以内(四字节),那为Fixnum实例。如果超过,即为Bignum实例。

可以通过num.to_s将整数转化为字符串。

指数操作符**。

puts 3**3  #27

操作符<=>比较大小。例如:a<=>b,若a大于b时返回正数,若相等时返回0,若小时返回负数。

1.2    浮点数(Float)

(1)浮点数的类. Float与C语言的double相同,其精度要看环境而定。

浮动数采用近似表示,例如0.1可能会存储为0.099999999999999…。

puts 0.3-0.2==0.1  #false

(2)可以通过truncate删除小数部分将其变为整数。

puts 5.3.truncate  #5

(3)可以通过num.to_s将浮点数转化为字符串。

1.3    字符串

定义方法:

1.3.1字符串型可以用单引号或双引号表示。

两种表式方法双引号推荐使用:双引号转义字符全;双引号中的字面量可以包含表达式。

1.3.2可以通过一对字符串分界符来定义字符串字面量。

分界符成对出现的,例如:(),[],{},两个!!。如果使用!做为分界符,其中字面量中又出现了!号,那么,需要\!来转义。当然,如果其中的字面量中出现了成对的分界符(其实是做为操作符出现的),那不需要转义的。

%q用于单引号规则,%Q用于双引号规则。

例如:%q(2*(1+1))内容等效于'2*(1+1)',%Q(2*(1+1))内容等效于"2*(1+1)"。

1.3.3 使用<<=Header定义一段字符串

例如:

s4=<<Header

first line

second line

third line

Header

字符串操作:

(1)用+号进行字符串连接。

对于不是字符串的需要to_s方法进行显示转换,才能用于连接。连接后的字符串会新建一个对象返回。

(2)用<<号进行字符串连接。

此操作符连接字符串,是修改左侧字符串,而不新建对象。

(3)用*号表示重复左侧字符串。

    "ab"*3=="ababab"

(4)[index, length]用于字符串截取或替换。

    puts "abcdef"[1,2]

(5)[index1..index2]通过range截取子字符串。

    puts "abcdef"[1..3]

(6)通过索引字符串,来判断包含关系。

    例如:puts "abcdef"["abc"]

(7)大小写转换

    例如:puts "abcdef".upcase

(8)字符串输出

name1  =  "Joe"

name2  =  "Mary"

puts  "Hello %s, where is %s"  %  [ name1 ,  name2 ]

puts  "Hello #{name1}, where is #{name2}"

1.4    数组

1.4.1 数组定义

arr1 = []

arr2 = Array.new

arr3 = ['1','2','3']

1.4.2 输出

print arr3,"\n"   #123

puts arr3[0]      #1

print arr3.join(",")  #1,2,3

1.4.3 访问数组元素

arr1[0]

arr1[-1]

arr1.first

arr1.last

arr1.max

arr1.min

arr1.length

arr1.size

1.4.4 数组操作

arr3[4] = '5'                    #此时arr3[3]默认尾nil

arr3.delete_at(3)                #删除指定下标的元素

arr3[2] = ["3a","3b","3c"]       #可以这样来做

arr3.delete(["3a","3b","3c"])    #可以删除上面添加的

arr3.push('6')                   #插入元素

arr3.insert(3,"b")               #在指定位置插入新元素

arr3<<"f"<<2                     #从左至右一次加入元素

arr3.pop                         #删除尾元素

arr3.shift                       #删除首元素

arr3.clear                       #清空数组

1.4.5 数组运算

aaa = [" aa ",4,5," bb "]

bbb = [4,1,3,2,5]

print aaa + bbb,"\n"         # [" aa ", 4, 5, " bb ", 4, 1, 3, 2, 5]

print aaa*2,"\n"         #[" aa ", 4, 5, " bb ", " aa ", 4, 5, " bb "]

print bbb - aaa              # [1, 3, 2]

print aaa | bbb,"\n"         #[" aa ", 4, 5, " bb ", 1, 3, 2]

print aaa & bbb,"\n"         # [4, 5]

print bbb.sort,"\n"          # [1, 2, 3, 4, 5]

print aaa.reverse,"\n"       # [" bb ", 5, 4, " aa "]

print bbb.sort.reverse,"\n"  # [5, 4, 3, 2, 1]

1.5    Hash类型

哈希字面量由逗号分隔的kv对来定义,被包括在花括号之间,kv对以=>来定义。推荐使用Symbol定义哈希中的key。因为如果使用字符串时,每个字符串都会生成一个字符串对象,使用Symbol则使用唯一标识。

h1={"a1"=>1,"a2"=>2}

h2={:a1=>3,:a2=>4}

h3={a1:5,a2:6}

puts h1["a1"]

puts h2[:a1]

puts h3[:a1]

Hash使用

(1)   value传递方法

cities  =  { 'CA'  =>  'San Francisco' ,

  'MI'  =>  'Detroit' ,

  'FL'  =>  'Jacksonville' }

cities [ 'NY' ]  =  'New York'

cities [ 'OR' ]  =  ' Portland'

def  find_city ( map ,  state )

  if  map.include?state

    return  map [ state ]

  else

    return  "Not found."

  end

end

cities [ :find ]  =  method ( :find_city )

while  true

  print  "State ? (ENTER to quit) "

  state  =  gets.chomp

  break if state.empty?

  puts  cities[:find].call( cities ,  state )

end

(2)   作为函数参数

Person.create(name: "John Doe", age: 27)

def self.create(params)

  @name = params[:name]

  @age  = params[:age]

end

(3)   构建默认value值

h = Hash.new {|h,k| h[k] = k*k }

puts h[2]

h2 = Hash.new(10)

#h2.default = 10

puts h2[3]

h.default = proc do |hash, key|

  hash[key] = key + key

end

(4)   通过value获取key值

h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300 }

h.key(200)   #=> "b"

h.key(300)   #=> "c"

(5)   常用方法

删除key

h.delete("z") { |el| "#{el} not found" }

h.delete_if {|key, value| key >= "b" }

遍历Hash

h.each {|key, value| puts "#{key} is #{value}" }

h.each_key {|key| puts key }

h.each_value {|value| puts value }

判断是否存在key或者value

h.has_key?("a")

h4.has_value?(300)

逆转key和value

h = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }

h.invert   #=> {0=>"a", 100=>"m", 200=>"d", 300=>"y"}

l  选择符合条件的key和value

h = { "a" => 100, "b" => 200, "c" => 300 }

h.select {|k,v| k > "a"}  #=> {"b" => 200, "c" => 300}

转换成数组

h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300  }

h.to_a   #=> [["c", 300], ["a", 100], ["d", 400]]

按层次展开

a =  {1=> "one", 2 => [2,"two"], 3 => "three"}

a.flatten    # => [1, "one", 2, [2, "two"], 3, "three"]

a.flatten(2) # => [1, "one", 2, 2, "two", 3, "three"]

posted @ 2013-05-24 10:33  swzhou  阅读(395)  评论(2编辑  收藏  举报