zoukankan      html  css  js  c++  java
  • Ruby数据类型

    数字类型

    • 书写整数时,可以根据需要在整数之间任意加入下划线而不会影响数字的值 a=123_45_78 puts a # => 12345678
    • to_i 截掉小数点之后的数字取整
    • 内置Math模块 Math::PI ,Math::exp(10) 计算e的10次幂
    • 2**2 2的2次方 , a=5 a**=2等价a=a**2

    字符类型

    • 输出长字符串非常自由,%Q会解析转义

      s = %q{不用带 引号?} s2 = %Q{不用带 引号?} 不用带 引号? 不用带 引号?

    • 嵌入字符 name = "Finley" ;color = "blue" puts "Hi #{name},you like #{color}"
    • 字符方法
    • str = "abcde" str.delete("d")str.delete!("d")区别,后者作用于本身

    符号类型

    • 字符串和符号对象可以通过 tos 和 tosym 来进行相互转化

    区间(范围)

    • a = 1..5 与 b = 1...5 区别,a包含5,b不包含5
     puts a === 5    true
     puts b === 5    false 
     a.max   5
     b.max   4
    
    • 区间转数组 (1..5).to_a => [1,2,3,4,5]
    • 区间的迭代
    zimu = "A".."J"
    zimu.each do |i|
        puts i.to_s
    end
    

    数组

    • 专门创建数组的方式 "%w",省去了加很多引号的时间 %w(one two three four) => ["one","two","three","four"]
    • 含有5个1的数组 a=Array.new(5,1) arr = [1,2,3,4,5,6,7,8]
    • 删除指定索引位置的元素 arr.delete_at(2)
    • 删除指定的元素,一次只能删除一个元素? arr.delete(3)
    arr = [1, 2, 3, 4, 5]
    arr.each { |a| print a -= 10, " " }
    # prints: -9 -8 -7 -6 -5
    
    • map 产生新的数组,如果map!直接作用于原数组 puts arr.map{ |a| a**2 } puts arr

    散列( 哈希)

    • s = Hash[1=>'a',2=>'b'] 等价于 s = {1=>"a", 2=>"b"}
    • 遍历哈希
    ar = {"name"=>"jack","age"=>18,"color"=>"red"}
    for key,value in ar do
        puts key + '--' + value.to_s
    end
    
    • 使用迭代器
    ar.each do |name|
        puts name[0].to_s + '--' + name[1].to_s
    end
    #另一种写法
    ar.each do |v,k|
        puts v.to_s + '--' + k.to_s
    end
    

    运算符

    • puts 5<=>8 左边对象小返回-1,相等0,否则1
    • === 当普通对象处于运算符的左边时,该运算符与“==”功能相同; 但左边的对象是一个 Range 对象,且右边对象包含在该 Range 内时,返回 true,否则返回 false (1..12)===8 返回 true

    并行赋值和嵌套赋值

    • 并行赋值
       a,b = "我是A","我是B"
       puts a
       a,b = b,a
       puts a  #变成了 "我是B"
    

    语句

    • 表达式后跟if后while条件 puts "good" if s >= 10
    • unless 与if相反,条件为true执行else后面的语句
    unless (条件) then
        代码块1
    else
        代码块2
    end
    
    • case,每个条件后面都有break效果,即score=1只会输出"悲催了"
    score = 2
    case score
        when 0,1,2
            puts "悲催了"
        when 0...60
            puts "不及格!"
        when 60...80
            puts "良"
        when 80...100
            puts "优"
        else
            puts "超出范围"
    end
    
    • break 跳出整个循环
        # loop会无限次循环,必须使用break跳出循环
        i = 0;
        loop{
            i += 1
            if (i>=3)    break
            # break 
        }
    
    • next 进入下一个循环,redo不会检查循环条件是否成立,就执行下一个循环
    # encoding:utf-8
    i = 1
    while(i&lt;=5) do 
        if (i == 5)
            i+=1
            #redo  #多输出6
            next
        end
        puts "当前i:" + i.to_s
        i+=1    
    end
    
  • 相关阅读:
    选择排序
    迭代器使用过程中为什么抛出ConcurrentModificationException
    自定义实现的ArrayList以及自定义实现的Iterator迭代器
    单链表
    collections方法记录
    JDK1.9中关于集合的新方法
    请使用时间相关的API,计算一个人从出生到现在一共活了多少天?
    java中对象的向上转型和向下转型
    异常相关知识整理
    可变参数相关知识
  • 原文地址:https://www.cnblogs.com/mafeifan/p/3245184.html
Copyright © 2011-2022 走看看