[英]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.