Ruby 中一些好用的方法(注意reduce方法)
#####inject
inject
是我使用最頻繁的方法了,它的強大之處在於可以方便的對巢狀的陣列,雜湊等混合資料結構進行合併或求和,
可以有效減少程式碼量。
例如最常見的陣列套雜湊:
1 2 3 4 | array = [{a:100}, {b:200}, {c:300}] array.inject(0) { |sum, e| sum += e.values.first } #600 array.inject({}) { |sum, e| sum.merge e } #{:a=>100, :b=>200, :c=>300} |
- inject():括號中的是sum的初始值
- sum, e: 和在前,陣列元素在後,中間必須以逗號隔開
#####group_by
group_by
適用於對於陣列和hash的分組.
在stackoverflow
,我經常遇到這樣的問題:
array
根據相同的school_id
進行分組
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | array = [{"school_id"=>"1", "plan_type"=>"All", "view"=>"true", "create"=>"true", "approve"=>"true", "grant"=>"true", "region_id" |
多條件分組:
1 2 | array.group_by { |e| [e["school_id"], e["plan_type"]] } #將多個條件放在陣列當中 => {["1", "All"]=>[{"school_id"=>"1", "plan_type"=>"All", "view"=>"true", "create"=>"true", "approve"=>"true", "grant"=>"true", "region_id"=>nil}, {"school_id"=>"1", "plan_type"=>"All", "edit"=>"true", "region_id"=>nil}], ["2", "All"]=>[{"school_id"=>"2", "plan_type"=>"All", "edit"=>"true", "grant"=>"true", "region_id"=>nil}]} |
####reduce
reduce
作用和inject
優點類似,但是它比inject
還要簡潔
1 2 3 | (5..10).inject {|sum, n| sum + n } # 45 (5..10).reduce(:+) # 45 (5..10).reduce(1, :+) # 46 (括號中第一個引數是初始值,第二個是方法名) |
以group_by
中的array
為例,將相同school_id
的hash進行合併
1 2 | array.group_by { |e| e["school_id"] }.values.map { |i| i.inject({}) { |sum ,e| sum.merge e }} => [{"school_id"=>"1", "plan_type"=>"All", "view"=>"true", "create"=>"true", "approve"=>"true", "grant"=>"true", "region_id"=>nil, "edit"=>"true"}, {"school_id"=>"2", "plan_type"=>"All", "edit"=>"true", "grant"=>"true", "region_id"=>nil}] |
可以使用inject
將hash合併,但是使用reduce效果會更好
1 2 | array.group_by { |e| e["school_id"] }.values.map { |i| i.reduce(:merge) } => [{"school_id"=>"1", "plan_type"=>"All", "view"=>"true", "create"=>"true", "approve"=>"true", "grant"=>"true", "region_id"=>nil, "edit"=>"true"}, {"school_id"=>"2", "plan_type"=>"All", "edit"=>"true", "grant"=>"true", "region_id"=>nil}] |
####zip
zip
可以將兩個數組合併為一個二維陣列
1 2 3 4 | a= [1,2,3,4,5] b=[6,7,8,9,10] a.zip(b) => [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] |
如果a.length
> b.length
,b中缺少的以nil代替 ,
1 2 3 4 | a=[1,2,3,4,5,6] b=[6,7,8,9,10] a.zip(b) => [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10], [6, nil]] |
如果a.length
< b.length
,b中多餘的直接被丟棄
1 2 3 4 | a= [1,2,3,4] b=[6,7,8,9,10] a.zip(b) => [[1, 6], [2, 7], [3, 8], [4, 9]] |
相關推薦
Ruby 中一些好用的方法(注意reduce方法)
#####inject inject是我使用最頻繁的方法了,它的強大之處在於可以方便的對巢狀的陣列,雜湊等混合資料結構進行合併或求和, 可以有效減少程式碼量。 例如最常見的陣列套雜湊: 1 2 3 4array = [{a:100}, {b:200}, {c:300}]
java中一些經常用到的小方法
1.java中如何把字元陣列轉化成字串,並以逗號分割 方法1、需要引入Apache Commons元件中的個commons-lang.jar包: String str1=StringUtils.join(ary, “,”);
遇到了mysql中一些好的函式或者方法
IFNULL(欄位,空值的預設值) 如果取同一行記錄中,多個列的最大或者最小值:GREATEST(列名) 最大值 ,LEAST(列名1,列名2) 最小值 if做輸出的條件輸出,例如:select if( value in (0,-1,-2
Java、JavaWeb中單元測試用到的測試方法
enc nbsp 方法 hat 思維 .com java assert 可能 寫出的代碼做單元測試時,一定要記住從三個方面出發:1、成功 2、異常 3 邏輯錯誤(即沒有異常也可能程序運行出最後結果,可是呢?呵呵)。這就是在做測試時我要牢記的三個方面,同時思維要嚴謹也即做
Python有哪些好用的語言翻譯方法
size webkit ted mage clas lan 網上 eba splay 最近有個需求,要將幾萬條數據從日語翻譯成中文。因為數據的獲取和處理用的是python代碼,所以想先嘗試翻譯部分也用python實現。 目前網上查到的翻譯方法有百度、有道以及谷歌翻譯,下
一些好用的油猴腳本
油猴 腳本1、先打開https://greasyfork.org/zh-CN,根據你的瀏覽器安裝油猴版本 2、瀏覽器擴展欄會出現這個圖標,左鍵點擊,選擇管理面板->實用工具->點擊導入文件,選擇附件裏的TXT文件再打開管理面板,出現如下圖片,就是安裝成功了。一些好用的油猴腳本
轉載 一些好用的網站
坐標系 ron editor class mos Edito front rap www. 一些好用的網站 笛卡爾坐標系: https://www.desmos.com/ 用於找規律:http://oeis.org/ 一個數的各種性質:http://zh.numberemp
Eclipse中修改SVN用戶名和密碼方法
int 代碼 cati face 常用 java style ica 選項 在用eclipse的時候會經常用到SVN來進行代碼的版本控制,為了方便起見,我們會保存密碼,從此之後就不會再出現輸入或者修改用戶名和密碼的地方了,這時候想切換用戶怎麽辦,在本地操作的一種方法
一些好用的網站
1. Ztree &n
idea一些好用的配置(eclipse快捷鍵、自動導包、提示不區分大小寫)
讓idea的快捷鍵使用eclipse的快捷鍵 ctrl+alt+s --> Keymap --> 選擇Eclipse 注意:換成eclipse快捷鍵之後可以再設定如下的idea提示快捷鍵 alt+/ idea引數提示: ide
好用的瀏覽器原生方法彙總
dom設定或移除className let bodyElement = document.getElementsByTagName('body')[0]; bodyElement.classList.add('myClass1'); // body元素新增calss:myCla
python中非常好用的資料庫管理工具dataset
dataset對於操作JSON檔案、NoSQL非常好用。 官方文件:http://dataset.readthedocs.io/en/latest/ 補充: 連線mysql資料庫: db = dataset.connect('mysql://username:[ema
記一些好用的Android Studio 外掛
1,CodeGlance 程式碼預覽外掛,可以在程式碼的右邊預覽,實現快速定位 2,EcTranslation 劃詞翻譯,可以幫助你翻譯不懂的英文,達到解讀程式碼的意思 3,GsonFormat Gson解析,快速生成java Bean的過程 4, Sex
mongodb 中非常好用的 Aggregate
mongodb 中非常好用的 Aggregate aggregate 翻譯過來是聚合的意思, 但是在實際的使用的它的體驗特別像linux中的管道, 每個管道處理完之後再把結果交個下一個管道, 你的資料就像水流, 最後通過各個管道你能夠得到你想要的資料 我們一般用Aggregate做什麼 aggreg
Notepad++一些好用的特性 mark ~~~全面
Notepad++一些好用的特性 2014年03月22日 10:11:16 -柚子皮- 閱讀數:3230 【notepad++簡介】 Notepad++是旨在替代Windows預設的notepad而生,比notepad的功能強大很多很多。 (1)Notepad++
一些好用的開源監控工具彙總
監控系統是整個 IT 架構中的重中之重,小到故障排查、問題定位,大到業務預測、運營管理,都離不開監控系統,可以說一個穩定、健康的 IT 架構中必然會有一個可信賴的監控系統。 但是,難道監控就只是監控?多年來,對於監控的術語一直都有很多困惑,一些很糟糕的工具也宣稱
Ruby中單元測試(Unit Test)方法
Ruby中也提供了單元測試的框架,類似Java中的JUnit,此框架在Ruby中被成為mini test。 我們先看一個例子,這個是我的原始碼: [code lang=”ruby”] require ‘json’ module PMU_INTERFACE class IUserLoginReq
一些好用的小工具(1)
文字類 Typora Notepad++ 有道雲筆記 txt wordpad(一般) XMind 有道詞典(神器,不過嚴格來說不屬於文字類) 簡單畫圖 mspaint 截圖 Snipaste(這個強推) PxCook MarkMan(這個一般
zsh和oh-my-zsh的一些好用的主題及外掛
zsh主題 zsh的預設主題為robbyrussell,用了一段時間發現並不是那麼好用,比如它不會把當前的工作路徑全部展示出來,例如現在處於路徑/home/zhu/go/src/MyProject中,此主題就只是顯示最後路徑,即MyProject,帶來了一些不
推薦一些好用的Chrom外掛
前言: 為什選擇chrome瀏覽器就是因為他有很多豐富的外掛可以供使用者使用,外掛社群還是比較火熱,推薦幾個好用的外掛給大家。 No1: