簡體   English   中英

僅使用 to_s 元素在 Ruby on Rails 中過濾數組

[英]Filter Array in Ruby on Rails with only to_s elements

我有這個運行良好的代碼

def self.select_some_elements(some_value)
   return elements.select { |element| element.some_value > some_value}
end

此代碼返回元素類實例/對象的數組。 但是,我想返回 element.to_s 實例/屬性的數組,而不是整個類對象,只是字符串/字符串屬性

有沒有一種無需額外步驟的快速方法?

介紹:

因此,您所實現的是一組對象(在本例中為數組),這很棒。 您現在要做的是將這個集合轉換為不同的集合:即,將每個對象替換為該對象的方法to_s返回的內容。 有一個完美的方法,稱為map 它遍歷所有項目,以每個項目作為參數調用一個塊,並將該塊返回的內容放入結果數組中:

打開irb控制台並播放:

>> [1,2,3].map{|x| 1}
=> [1, 1, 1]
>> [1,2,3].map{|x| x+1}
=> [2, 3, 4]
>> [1,2,3].map{|x| "a"}
=> ["a", "a", "a"]
>> [1,2,3].map{|x| x.to_s}
=> ["1", "2", "3"]
>> [1,2,3].map(&:to_s)
=> ["1", "2", "3"]

最后的轉換似乎是您所需要的:

答案:像這樣在最后添加.map(&:to_s)

def self.select_some_elements(some_value)
   return elements.select { |element| element.some_value > some_value}.map(&:to_s)
end

.map(&:to_s).map { |element| element.to_s }的簡短版本 .map { |element| element.to_s } . 你可以在文檔中閱讀Arra3#map

當你把頭放在#map ,請查看Stefan 的答案,其中顯示了如何將select{}.map壓縮到一個filter_map調用中(做兩件事:過濾器,並在一次迭代中映射而不是兩次)。

從 Ruby 2.7 開始,有filter_map

elements = [1, 2, 3, 4, 5]

elements.filter_map { |e| e.to_s if e > 2 }
#=> ["3", "4", "5"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM