zoukankan      html  css  js  c++  java
  • ruby api 2.1新增改变

    -> 这个符号可以替换lambda
    %i 生成符号数组 %i(foor bar baz) #[:foo,:bar:baz]
    def 定义方法 eg: def foo(x: 1); puts; end
    hash {a:1,b:2}替换{:a=>1,:b=>2}
    r 数字后面接r表示有理数 1.2r
    Array.try_convert 转换成数组对象
    Array.rotate 通过转动产生数组,将第一个元素放到最后,理解成左轮-手-枪-旋转
    Array.keep_if 删除使代码块结果为false的元素
    Array#sample 选择一个随机元素
    Array#repeated_permutation (n),使用原来数组的元素,组合成数组,数组的元素数是n,然后将这些数组再装入一个数组中返回,元素可以重复使用

    Array#repeated_combination (n),使用原来数组的元素,组合成数组,数组的元素数是n,然后将这些数组再装入一个数组中返回,元素不可以重复使用

    eg:
    a = [1, 2, 3]
    p a.repeated_combination(2).to_a # [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
    p a.repeated_permutation(2).to_a #[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]

    Hash#to_h 转换成hash对象
    Hash#default_proc= 当取某个key时不能取到给一个默认值
    Hash#key(value) 通过值得到key
    Hash#keep_if 删除代码块为false的键值对

    Hash#assoc 使用==搜索与给定的key相当的键值对
    Hash#rassoc 使用==搜索与给定的value相当的键值对
    Hash#flatten 将hash变成数组

    Hash#compare_by_identity 让map的key的哈希值作为他们的值的唯一key

    h1 = { "a" => 100, "b" => 200, :c => "c" }
    h1["a"] #=> 100
    h1.compare_by_identity 调用后
    h1.compare_by_identity? #=> true
    h1["a".dup] #=> nil # different objects. 使用a的拷贝取不到了 ,拷贝后的字符串“a”是另一个对象
    h1[:c] #=> "c" # same symbols are all same. 符号总是唯一

    Enumerable#to_h 转换成hash结构
    Enumerable#flat_map 数组每个元素扔进块里计算,计算后返回的如果是数组遍历这个数组每个元素取出来,统一放回一个数组再返回
    [1, 2, 3, 4].flat_map { |e| [e, -e] } #=> [1, -1, 2, -2, 3, -3, 4, -4]
    [[1, 2], [3, 4]].flat_map { |e| e + [100] } #=> [1, 2, 100, 3, 4, 100]


    Enumerable#each_entry 包含yield的语句就是迭代器方法,each_entry调用迭代器 将迭代其中yeild返回的数据,传入给定的代码快计算,如果yeild返回多个数据,这多个数据就是一数组形式传入代码快

    class Foo
    include Enumerable
    def each
    yield 1
    yield 1, 2
    yield
    end
    end
    Foo.new.each_entry{ |o| p o }


    Enumerable#each_with_objec 将每个元素传入代码快计算,返回给定的初始对象

    evens = (1..10).each_with_object([]) { |i, a| a << i*2 }

    #=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

    Enumerable#chunk 根据代码快结果。来判断每个元素是否放在一起返回

    [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk { |n|
    n.even?
    }.each { |even, ary|
    p [even, ary]
    }
    #=> [false, [3, 1]]
    # [true, [4]]
    # [false, [1, 5, 9]]
    # [true, [2, 6]]
    # [false, [5, 3, 5]]

    解释上面代码: 3被取出来判断时候是偶数,返回真假,如果是假,even=false,3放到数组里,此时数组是[3]。然后接着判断 1还是假,再放到数组里[3,1],
    判断到4是偶数,even=true,将4放到新数组里[4],将前面的[false,[3,1]]打印出来


    Enumerable#slice_before 对于每个被chunked的元素依据真假,返回一个集合里,给这个创建一个枚举器


    a = [0, 2, 3, 4, 6, 7, 9]
    prev = a[0]
    p a.slice_before { |e|
    prev, prev2 = e, prev
    prev2 + 1 != e
    }.map { |es|
    es.length <= 2 ? es.join(",") : "#{es.first}-#{es.last}"
    }.join(",")
    #=> "0,2-4,6,7,9"

    解释: 1 prev=a[0] #这时prev为0
    2 进入 { |e|
    prev, prev2 = e, prev
    prev2 + 1 != e
    }
    3 pre =0,prev2 =0
    4 prev2 + 1 != e 为假
    5 将e也就是0放进数组,[0]
    6 当便利到2时, prev2 + 1 != e 为假,然后2放入新数组,[2],

    当chunk后面块结束后 是下面形式

    [0]
    [2, 3, 4]
    [6, 7]
    [9]
    nil

    然后返回这个迭代器,调用map 后面的块

    Enumerable#lazy 直到需要的时候再运行枚举器

    Kernel#dir 文件的目录名

    Kernel#callee 当前方法名作为符号返回

    Module#class_variable_get 得到类变量的值

    Module#class_variable_set 设置类变量的值
    Module#remove_class_variable 移除实例变量

    Module#public_constant 返回一个包含公有常量的列表
    Module#private_constant 返回一个包含私有常量的列表


    Module#singleton_class? 判断是否是singleton类

    Module#prepend include的可替换方法

    Module#public_instance_method 返回包含实例方法的数组

    Object#!~ 如果两个对象相当返回真


    Object#singleton_class 返回对象singleton类
    Object#untrust 标记一个对象不受信任
    Object#untrusted? 如果对象是不受信任返回真
    Object#trust 从对象身上移除不受信任标记

    Object#remove_instance_vari
    able 从对象身上移除实例变量


    Object#public_send 调用公共方法
    Object#public_method 类似method方法,只查找public方法
    Range#bsearch 数组使用二分查找

    Socket.getifaddrs网络访问接口

    String#clear 将字符串清空

    String#chr 返回字符串开头字符

    String#encode 将字符串按照某种编码方式编码


    String#getbyte 将字符换位整数返回

    String#setbyte 使用整数设置字符

    String#byteslice 截取字符

    String#scrub 移除无效的字符序列

  • 相关阅读:
    ACM-ICPC 2018 南京赛区网络预赛
    我们
    2018 Multi-University Training Contest 7
    ACM International Collegiate Programming Contest, JUST Collegiate Programming Contest (2018)
    BZOJ1834 [ZJOI2010] network 网络扩容
    BZOJ4415 [SHOI2013] 发牌
    BZOJ1257 [CQOI2007] 余数之和sum
    BZOJ3110 [ZJOI2013] K大数查询(加强数据)
    BZOJ1406 [AHOI2007] 密码箱
    BZOJ3110 [ZJOI2013] K大数查询
  • 原文地址:https://www.cnblogs.com/or2-/p/5041047.html
Copyright © 2011-2022 走看看