zoukankan      html  css  js  c++  java
  • HeadFIrst Ruby 第七章总结 hashes

    前言

    这一章节介绍了 Ruby 中 hash 这一数据类型的用法和特征.

    Hash 的定义

    与 array 的对比

    最大的不同:

    An array can only use integers as indexes, but a hash can use any object as a key.

    其他不同点:

    1. array 用 [] 包括起来, hash 用 { } 包括起来.(但是 specify 的时候都是通过 [[)
    2. array 查找某一个元素需要遍历, hash 查找一个元素是通过 key 的

    Hash return "nil" by default

    解释: 在 specify 的时候,如果键不存在,那么返回的值为 nil.

    Ruby 中的 nil

    在 Ruby 中,与其他语言不同, nil and only nil is "falsy"

    解决办法

    格式: votes = Hash.new(0)
    功能:通过 create a new hash with a default object of "0" 的方式,当我们想要 access 一个不存在的 key 所对应的 value 的时候,默认返回值为 0.

    Hash 的 each 方法

    格式: 
    votes.each do |name, count|
    puts "#{name} : #{count}"
    end

    注意:
    与 array 中的 each 方法的功能相同,但是需要两个参数.

    Hash 作为 method 的 parameter

    method 调用普通 parameter 与 hash 的对比

    不同之处:

    1. 对于 parameter 来说, arguments 必须 in exactly the right order; 对于 hash 来说,这不是必要的
    2. 对于 parameter 来说, required parameters have to appear before optional parameters, 对于 hash 来说, 你可以 skip 任何一个 key that you want.
    3. 对于 parameter 来说,很难区别参数之间, 对于 hash 来说,可以通过 key 来得知 value 代表了什么

    Hash 的简化

    简化方式一: Leave off the braces

    在调用 method 的时候,可以去掉 "{ }" 
    格式: 
    candidate = Candidate.new("Carl Barnes", :age => 49, :occupation => "Attorney")

    简化方式二: Leave out the arrows

    在输入 Hash 的时候, 可以用 key: value 的格式

    Required keyword arguments

    格式:

    def initialize(name, age: nil, occupation: nil, hobby: nil, birthplace: "Sleepy Creek")

    功能:

    Hash 作为 method 的参数的时候, 如果存在 typo 的时候,Ruby 不会报错,因此是一种 silent failures, 可以通过 required keyword 来避免.

    与一般 parameter 的区别

    如果在 : 后面没有值,它和一般的 parameter 功能相同
    如果在 : 后面有值,它和 parameter = default value 的功能相同





  • 相关阅读:
    面试题27:二叉树的镜像
    面试题26:树的子结构
    面试题25:合并两个排序的链表
    面试题24:反转链表
    面试题23:链表中环的入口节点
    面试题22:链表中倒数第k个节点
    欧拉函数的使用
    C++ STL 全排列函数详解
    Ubuntu系统安装网易云音乐、搜狗输入法
    Ubuntu系统 安装谷歌 Chrome 浏览器
  • 原文地址:https://www.cnblogs.com/FBsharl/p/10531972.html
Copyright © 2011-2022 走看看