创建哈希的“方便”方法[重复]

Posted

技术标签:

【中文标题】创建哈希的“方便”方法[重复]【英文标题】:"convenience" methods of creating hashes [duplicate] 【发布时间】:2013-07-28 09:53:29 【问题描述】:

这是我迄今为止创建哈希的方式(根据 Codecademy)

my_hash = 
  "pay" => "low",
  "vacation" => "yes",
  "parking" => "no"

这是 ruby​​monk 创建哈希的新便捷方法。

chuck_norris = Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]

第二种技术中的冒号是语法的一部分还是字符串的一部分?如果它们只是字符串的一部分,为什么字符串不在引号中?

【问题讨论】:

它与哈希无关。 确实是重复的。不知道它们是符号对象。现在要去读那篇文章。谢谢 【参考方案1】:

第二种技术中的冒号是语法的一部分还是字符串的一部分?如果它们只是字符串的一部分,为什么字符串不在引号中?

查看Rubydoc我们可以看到Hash::[]方法有三种形式:

Hash[ key, value, ... ] → new_hash
Hash[ [ [key, value], ... ] ] → new_hash
Hash[ object ] → new_hash

您的具体示例是第一种情况的实例,其中对象列表被解释为键值对。所以调用:

Hash[a, b, c, d, e, f]

将配对:

a => b c => d e => f

我认为您对: 语法感到困惑,您可以在此处easily take a look at SO 上的一些主题。总结一下:本例中的: 构造了一个Symbol 对象。

总结:

Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]

可以表示为以下哈希:


    :punch => 99,
    :kick => 98,
    :stops_bullets_with_hands => true

其中:punch:kick:stops_bullets_with_hands是符号,9998true是对应的值。

要返回值,您可以简单地使用 Hash#[] 方法,如下所示:

chuck_norris[:punch] # 99
chuck_norris[:kick] # 98
chuck_norris[:stops_bullets_with_hands] # true

请记住,您可以通过#to_s 方法将符号转换为字符串:

:punch.to_s # "punch"
:kick.to_s # "kick"
:stops_bullets_with_hands.to_s # "stops_bullets_with_hands"

【讨论】:

【参考方案2】:

第二种技术中的冒号是语法的一部分还是字符串的一部分?

: 不是 Hash 创建语法的一部分,您可以在此处看到它,因为您的第二个示例使用符号作为键。 :punch,:kick,:stops_bullets_with_hands 是 Symbol 对象。Hash::[] 是用于创建 Hash 对象的方法。

Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
     |_________| |________|
     (key,value) (key,value)

在第二个示例中,键被视为符号。但是你也可以使用 string、fixnum 等。

【讨论】:

啊 - 在课程中引入了一种全新的对象类型,没有任何警告!所以它们不是创建哈希的语法的一部分。我应该只看 :punch、:kick 等,就好像它们是整数或字符串一样。对吗? @Taymon 怎么样? Hash::[] 方法只需要 (key,value) 对,key,value 组合应该是什么对象并不重要.. 这个其实应该在Rubymonk论坛里。但是没有这样的论坛。问题是,他们将符号(带冒号)引入了关于使用新技术创建哈希的非常基础的课程中。冒号看起来像是新语法的一部分。谢谢各位大佬解惑!

以上是关于创建哈希的“方便”方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

基于对象的某些属性创建唯一的哈希码[重复]

修改 CLOB 以删除重复项

初始化 C# 哈希表的最简洁方法 [重复]

基本 Ruby - 编写哈希 [重复]

创建方法来总结Java的HashMap中的所有值[重复]

获取哈希中唯一条目的值[重复]