Ruby on Rails中筛选数组仅返回元素to_s字符串的快捷方法
解决方案
你可以直接在select查询后链式调用map方法,配合Ruby内置的符号转Proc语法糖即可无冗余实现需求,这是Ruby社区的标准惯用法:
def self.select_some_elements(some_value) elements.select { |element| element.some_value > some_value }.map(&:to_s) end
补充说明
- 写法里的
&:to_s是Ruby语法糖,等价于完整的块写法{ |element| element.to_s },代码更简洁易读,原有逻辑不需要做任何调整 - 如果你使用Ruby 2.7及以上版本,还可以用编号参数进一步简化select块的写法:
def self.select_some_elements(some_value) elements.select { _1.some_value > some_value }.map(&:to_s) end
- 如果你的
elements数据量很大,想要避免两次遍历(筛选一次、转字符串一次)的性能损耗,可以用each_with_object一次性完成筛选和转换,仅需遍历一次:
def self.select_some_elements(some_value) elements.each_with_object([]) do |element, arr| arr << element.to_s if element.some_value > some_value end end
以上所有写法都不会产生额外的中间变量或者冗余步骤,执行逻辑和你原有代码完全一致,仅对筛选后的结果做字符串转换后直接返回。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

