10個驚豔的Ruby單行程式碼

2016-04-23    分類:WEB開發、程式設計開發、首頁精華1人評論發表於2016-04-23

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

有人想出了Scala的10個單行程式碼例子。然後CoffeeScript版本迅速崛起,於是我想到釋出一個Ruby版本的。我覺得Ruby的語法比Scala清潔點,雖然實質上(至少就這些例子來說)是比較相似的。

1.陣列中的每個元素乘以2

(1..10).map { |n| n * 2 }

2.陣列中的元素求和

(1..1000).inject { |sum, n| sum + n }

或使用(內建的)Symbol#to_proc語法,自Ruby 1.8.7之後可用:

(1..1000).inject(&:+)

甚至就直接傳遞一個符號:

(1..1000).inject(:+)

3.驗證在字串中是否有tokens存在

words = ["scala", "akka", "play framework", "sbt", "typesafe"]
tweet = "This is an example tweet talking about scala and sbt."

words.any? { |word| tweet.include?(word) }

4.讀取檔案

file_text = File.read("data.txt")
file_lines = File.readlines("data.txt")

後者包括“\n”在陣列每個元素的末端,它可以通過附加 .map { |str| str.chop } 或者使用替代版本來做修整:

File.read("data.txt").split(/\n/)

5.生日快樂

4.times { |n| puts "Happy Birthday #{n==2 ? "dear Tony" : "to You"}" }

6.過濾陣列中的數字

[49, 58, 76, 82, 88, 90].partition { |n| n > 60 }

7.獲取並解析一個XML Web服務

require 'open-uri'
require 'hpricot'

results = Hpricot(open("http://search.twitter.com/search.atom?&q=scala"))

這個例子需要open-uri或hpricot或等效庫(如果你願意,你可以使用內建的)。沒有太多的程式碼,但Scala在這裡明顯勝出。

8.在陣列中查詢最小(或最大)值

[14, 35, -7, 46, 98].min
[14, 35, -7, 46, 98].max

9.並行處理

require 'parallel'

Parallel.map(lots_of_data) do |chunk|
  heavy_computation(chunk)
end

不像Scala,多核支援不是內建的。它需要parallel 或類似的東西。

10.埃拉託斯特尼篩法

Scala的單行程式碼很聰明,但完全不可讀。此處雖然並非單行程式碼,但用Ruby可以寫出更簡單的實現:

index = 0
while primes[index]**2 <= primes.last
      prime = primes[index]
      primes = primes.select { |x| x == prime || x % prime != 0 }
      index += 1
end
p primes

最後一個例子直接來自StackOverflow。雖然不是最漂亮的程式碼,但提供了一種思路。

譯文連結:http://www.codeceo.com/article/10-ruby-oneline-code.html
英文原文:10 Ruby One Liners to Impress Your Friends
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章