ruby是一門可以用sexy來形容的語言,下面就列舉幾個sexy的迭代操作。
1. each簡單迭代
words=%w(good god ruby sexy girl run)
words.each do |word|
puts word
end
2. find 查找單個元素
words=%w(good god ruby sexy girl run)
words.find do |word|
word.start_with? 'r'
end
=> "ruby"
3. select 選取元素
words=%w(good god ruby sexy girl run)
words.select do |word|
word.start_with? 'r'
end
=> ["ruby", "run"]
4. reject 剔除元素
words=%w(good god ruby sexy girl run)
words.reject do |word|
word.start_with? 'r'
end
=> ["good", "god", "sexy", "girl"]
5. map 轉換元素
words=%w(good god ruby sexy girl run)
words.map do |word|
word.capitalize
end
=> ["Good", "God", "Ruby", "Sexy", "Girl", "Run"]
6. 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 分組元素
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 排序元素
words=%w(good god ruby sexy girl Run)
words.sort_by do |w|
w.length
end
=> ["Run", "god", "sexy", "ruby", "girl", "good"]
9. 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 累積元素
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"