#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
.
中受益越多
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
.