#map_find 在 Ruby 中?

#map_find in Ruby?

Return 一组文本行中匹配的第一个关键字。

我发现#map#find#find再次解决了问题。一个不令人满意的复杂解决方案。

["unrelated", "start something", "stop something"].map do |t|
  ["start","stop"].find {|k| k == t.split(/[ \t]{1,}/).first}
end.find {|k| !k.nil?}

以上returns"start"符合预期。 #map_find 这样的便捷方法可以压缩它。或者也许已经存在针对此问题的巧妙选择算法。请指教


编辑

另一个解决方案:

keys = ["start", "stop"]
reg = Regexp.new("^"+keys.first+" |^"+keys.last+" ")
["unrelated", "start something", "stop something"].map{|m| m.slice(reg)}.find {|k| !k.nil?}

我会这样做:

lines = ["unrelated", "start something", "stop something"]
keywords = /\A(start|stop)/

lines.lazy.map { |line| line[keywords] }.find(&:itself)
#=> "start"

lines 的数量较少时,您可能希望跳过 lazy。它越大,您将从 lazy.

中受益越多