ruby 性感的迭代操作

           ruby是一門可以用sexy來形容的語言,下面就列舉幾個sexy的迭代操作。

1. each簡單迭代

       each是ruby中非常常見的遍歷操作,她是年老色衰的for直接替代品。如果需要索引,則可以使用each_with_index方法。
words=%w(good god ruby sexy girl run)
words.each do |word|
	puts word
end

2. find 查找單個元素

     查找到第一個符合條件的元素,find
words=%w(good god ruby sexy girl run)
words.find do |word|
	word.start_with? 'r'
end
=> "ruby"

3. select 選取元素

    選取所有符合條件的元素,select
words=%w(good god ruby sexy girl run)
words.select do |word|
	word.start_with? 'r'
end
=> ["ruby", "run"]

4. reject 剔除元素

    剔除部分符合條件的元素,reject
words=%w(good god ruby sexy girl run)
words.reject do |word|
	word.start_with? 'r'
end
=> ["good", "god", "sexy", "girl"]

5. map 轉換元素

    轉換每個元素,map
words=%w(good god ruby sexy girl run)
words.map do |word|
	word.capitalize
end
=> ["Good", "God", "Ruby", "Sexy", "Girl", "Run"]

6. uniq 唯一化

    剔除相等的元素,uniq
words=%w(good god ruby sexy girl run run god Run)
words.uniq
=> ["good", "god", "ruby", "sexy", "girl", "run", "Run"]

   也可以在塊中指定比較的方法,自定義比較的對象。
words=%w(good god ruby sexy girl run run god Run)
words.uniq do |w|
	w.downcase
end
=> ["good", "god", "ruby", "sexy", "girl", "run"]

7. group_by 分組元素

      分組元素,這個真的很sexy,group_by
     按首字母分組:
words=%w(good god ruby sexy girl Run)
words.group_by do |w|
	w.capitalize[0]
end
=> {"G"=>["good", "god", "girl"], "R"=>["ruby", "Run"], "S"=>["sexy"]}

8. sort_by 排序元素

     排序元素,sort_by
words=%w(good god ruby sexy girl Run)
words.sort_by do |w|
	w.length
end
=> ["Run", "god", "sexy", "ruby", "girl", "good"]

9. zip 組合元素

    組合遍歷元素,zip
words=%w(good god ruby sexy girl Run)
numbers=(11..16)
symbols=%w(+ - * / = %)
words.zip(symbols,numbers)
=> [["good", "+", 11], ["god", "-", 12], ["ruby", "*", 13], ["sexy", "/", 14], ["girl", "=", 15], ["Run", "%", 16]]

10. inject 累積元素

     累積元素求值,這是我最喜歡的一個,inject
numbers=(1..10)
numbers.inject do |memo,value|
	memo=memo+value
end
=> 55

    這是比較簡單的,舉個難點的,如果需要將hash表 {a:1,b:2,c:3,d:1} 的鍵和值相互調換,即鍵變值,值變鍵,並且重複的值變成鍵後將原本的鍵變成列表形式的值。
tbl={a:1,b:2,c:3,d:1}
tbl.inject({}) do |memo,(k,v)|
	memo[v]||=[]
	memo[v]<<k
	memo
end
=> {1=>[:a, :d], 2=>[:b], 3=>[:c]}

11. partition 分組操作

     將元素分爲符合條件和不符合條件的兩個組。
   
(1..6).partition { |v| v.even? }  #=> [[2, 4, 6], [1, 3, 5]]

12. flatten扁平化列表

    將多級列表合併爲一個單獨列表,以上例的列表爲例。
[[2, 4, 6], [1, 3, 5]].flatten  #=>[ 2 , 4 , 6 , 1 , 3 , 5 ]

13. rotate旋轉列表

a = [ "a", "b", "c", "d" ]
a.rotate         #=> ["b", "c", "d", "a"]
a                #=> ["a", "b", "c", "d"]
a.rotate(2)      #=> ["c", "d", "a", "b"]
a.rotate(-3)     #=> ["b", "c", "d", "a"]

14. join將列表轉換爲一個字符串

[ "a", "b", "c" ].join        #=> "abc"
[ "a", "b", "c" ].join("-")   #=> "a-b-c"




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章