兩個 Ruby 建構 Array 和 Hash 的小技巧

标签: Ruby | 发表时间:2011-07-05 12:28 | 作者:ihower Sean Lee
出处:http://ihower.tw/blog

Array

我想你可能寫過以下這樣的程式。其中 params[:a] 可以只有一個元素,也可以是陣列。但是為了接下來能夠處理,我們需要轉成陣列 array 變數:


array = (params[:a].is_a? Array)? params[:a] : [params[:a]]

這裡我們手動判斷了 params[:a] 是不是陣列,實在是有點 ugly。其實 Ruby 內建的 API 就可以支援下述寫法:


array = Array(params[:a])

無論 params[:a] 是陣列還是單一元素,Array(params[:a])會確保出來一定是陣列。

Hash

你有一個物件或是陣列,你想要轉成 Hash,最常見基本的作法會是先初始一個 hash,然後迭代設定它:


hash = {}
data.each { |d| hash[d.foo] =  d.bar }

高級一點的,也許會思考怎樣寫成一行,然後想到用 inject:


hash = data.inject({}) { |h,d| h[d.foo] =  d.bar; h }

不過,這裡我要介紹一種我的最愛:


hash = Hash[ data.map {|d| [d.foo, d.bar]} ]

Hash[]是一個Ruby內建的API可以把陣列轉成Hash,而且效能非常好,比前兩個方法都好。inject想當然是最慢的,我最不推薦使用。

有人跟我抱怨Hash[]有點 magic 可讀性不佳。可是啊,這是 Ruby “原生”的 Hash API,一點都不 magic。你不知道看不懂跟抱怨程式碼可讀性不佳,我個人認為是兩件事情哩。

相关 [ruby array hash] 推荐:

兩個 Ruby 建構 Array 和 Hash 的小技巧

- Sean Lee - ihower { blogging }
我想你可能寫過以下這樣的程式. 其中 params[:a] 可以只有一個元素,也可以是陣列. 但是為了接下來能夠處理,我們需要轉成陣列 array 變數:. 這裡我們手動判斷了 params[:a] 是不是陣列,實在是有點 ugly. 其實 Ruby 內建的 API 就可以支援下述寫法:. 無論 params[:a] 是陣列還是單一元素,Array(params[:a])會確保出來一定是陣列.

js 数组Array用法

- - CSDN博客推荐文章
slice 方法返回一个 Array 对象,其中包含了 arrayObj 的指定部分. slice 方法一直复制到 end 所指定的元素,但是不包括该元素. 如果 start 为负,将它作为 length + start处理,此处 length 为数组的长度. 如果 end 为负,就将它作为 length + end 处理,此处 length 为数组的长度.

一致性hash

- - 互联网 - ITeye博客
一致性hash算法 - consistent hashing. 分类:  算法艺术2010-02-02 09:19 69836人阅读  评论(97)  收藏  举报. 算法 cache object 服务器 存储 c. 一致性 hash 算法( consistent hashing ).

了解Ruby Gems

- Jacky - Reborn
所谓RubyGem,就是一个个软件包,通常被简称为“gem”. 通常一个Gem里包含一个Ruby应用程序或者一个Ruby程序库. 而RubyGems软件本身允许用户在自己的系统中轻松地下载、安装、操作Gems. 以下两个网址无论如何都应该放到自己的收藏夹里:. 最著名的Gem之一,当然是Rails——当我们安装Rails的时候,使用的命令行是:.

开始Ruby

- TheLover_Z - 博客园-首页原创精华区
我的上一篇为什么要学动态语言和大家分享了一些心得,如果有人因此想试试动态语言,哪怕是一点点,我也很高兴,毕竟自己写的东西还有点意义. 俗话说,万事开头难,但是开始用动态语言一点也不难,还是以ruby为例. 1.首先来看看这个网站, http://tryruby.org/. 顾名思义,这个网站的目的就是让大家试试Ruby,我觉得做的比较好的就是它有一步步的教程,只要照着它的提示一步步往下,就能领略Ruby的魅力.

Hash Collision DoS 问题

- mazhechao - 酷壳 - CoolShell.cn
最近,除了国内明文密码的安全事件,还有一个事是比较大的,那就是 Hash Collision DoS (Hash碰撞的拒绝式服务攻击),有恶意的人会通过这个安全弱点会让你的服务器运行巨慢无比. 这个安全弱点利用了各语言的Hash算法的“非随机性”可以制造出N多的value不一样,但是key一样数据,然后让你的Hash表成为一张单向链表,而导致你的整个网站或是程序的运行性能以级数下降(可以很轻松的让你的CPU升到100%).

局部敏感Hash

- - xiaobaoqiu Blog
之前在项目中做数据聚合去重的逻辑的时候简单看过局部敏感Hash(Locality Sensitive Hashing,简称LSH)这个东东. LSH可以理解为一种衡量文本相似度的算法,特点是散列前的相似点经过哈希之后,也能够在一定程度上相似,并且具有一定的概率保证. 其有坚实的理论依据(98年左右理论就提出来了,99年有第一版实现)并且在高维数据空间中表现优异.

Ruby On Rails 4 hello world,Ruby On Rails上手

- - CSDN博客Web前端推荐文章
有机会再试一试Rails了,只是原来接触的是2,现在已然变成了4,似乎现在的安装比原来会快些. 似乎这就是当前的最新版本. 似乎这就是诸如Django、Rails这类对于轻量级网站的数据库要求. 其他可以看情况安装,如openSUSE. 可以直接用rails生成. 这样的话打开  http://localhost:3000 就可以看到,Rails的欢迎界面Welcome aboard,有点类似于Django-CMS的小马哥~~.

安装rails(ruby on rails)

- - BlogJava_首页
  记得两年前使用ror做网站,自动生成功能记忆犹新,只是当时网络知识实在缺乏,体会不到其中的乐趣. 现在了解的很多了,书也有两本,一直想重新体验最新版做个网站. 安装这个过程实在有点坑爹,查找网上若干ror的书包括2012年版的书,按照上面的步骤都没法安装完成,搞得我一会在linux下试验,一会在windows下试验,都没成功,只好放下.

Hash算法的使用

- khsing - Glider's home
在对语料文本进行2,3元切分时,需要借助hash表来获得切分内容在内存中的位置,以便能够记录语料库中出现的次数. 以前知道有很多hash算法,但没认真研究过,今天才知道hash算法差距还是很明显的. 首先我选择的是暴雪在魔兽里的hash算法,这个算法很高级,是time33类型的一个变种(有关time33的介绍,可以参考:http://www.cnblogs.com/napoleon_liu/articles/1911571.html),而且很巧妙的借助3次hash避免字符串比较这种费时的操作,并且不用链表来存储冲突,3次hash冲突值能相等的可能行只有1/10的23次方,应该说不可能冲突了.