2015-10-13 63 views
0

在Codecademy上徘徊時,我遇到了一些與sort_by方法混淆的地方。例如,{ |a, b| b }在我的代碼中發生了什麼?我想|a, b|,或任何你想要它被指定爲,映射數組的|key, values|,但這意味着什麼然後排序我的新哈希frequencies{ |key, value| value }在一個簡單的直方圖中瞭解Ruby sort_by方法

puts "Let's make a histogram of word counts, please supply text: " 
text = gets.chomp 

words = text.split(" ") 
frequencies = Hash.new(0) 
words.each { |word| frequencies[word] += 1 } 
frequencies = frequencies.sort_by { |a, b| b } 
frequencies.reverse! 
frequencies.each { |word, frequency| puts word + " " + frequency.to_s } 
+1

按值對鍵 - 值對進行排序。又是什麼問題? –

+1

考慮到直方圖是數據的圖形表示,您的標題沒有任何意義。我建議你將「以簡單的直方圖」更改爲「計算頻率時」(或某些方面)。 –

回答

0

Hash#sort_by{|key, value| value}(實際上定義爲Enumerable#sort_by)指:

  • 採取keyvalue是關鍵,並且每個鍵 - 值對的值(這倍受|key, value|表示),和
  • 排序方式value(這很多由value表示)。
+2

它是可枚舉的#sort_by,btw –

+0

@SergioTulentsev對。但在這種情況下,我必須特別說明變量對應於鍵和值。 – sawa

0

排序時散,你總是提供兩個變量,在這種情況下,ab,其中,像你說的,代表了鍵和值。如果只按第二個變量進行排序,則意味着您只想根據該值對散列進行排序。

在你的例子中,當你按值進行排序然後反轉它時,你按照最頻繁到最不頻繁的詞順序排序你的頻率。

0
some_hash = { 
    "a" => 2, 
    "b" => 3, 
    "c" => 1 
} 

some_hash.sort_by { |key, value| value } 

它返回

[["c", 1], ["a", 2], ["b", 3]] 

sort_by方法將整理基於條件傳遞給它的塊。所以我可以這樣做:

some_hash.sort_by { |key, value| key.start_with?("a") && value > 0 } 

並且這將返回任何滿足這些條件的鍵/值對。

此外,您還可以使用sort_by只有一個說法:

sort_by { |arg| arg } 

在管道中傳遞兩個參數允許您通過您設置的條件來分隔哈希鍵和值和排序每一對。