Filter array of arrays with an array in Ruby -
looking more efficient way of filtering array of arrays using array in ruby. let me demonstrate. starting this:
core = [[1, "apple", "james bond"], [5, "orange", "thor"], [10, "banana", "wolverine"], [15, "orange", "batman"], [20, "apple", "mickey mouse"], [25, "orange", "lee adama"], [30, "banana", "luke skywalker"]] filter = ["apple", "banana"] result = core.magical_function(filter) # result == [[5, "orange", "thor"], # [15, "orange", "batman"], # [25, "orange", "lee adama"]]
the thing can think of looping through filter elements, slows down code lot when toy example gets more complicated.
use array#reject , array#include?:
core.reject { |_,fruit,_| filter.include?(fruit) } # => [[5, "orange", "thor"], [15, "orange", "batman"], [25, "orange", "lee adama"]]
if filter
large, first convert set faster lookups:
require 'set' filter_set = filter.to_set core.reject { |_,fruit,_| filter_set.include?(fruit) }
see set , instance methods. when require
d, set adds instance method to_set
module enumerable
inclued
ed array
. ruby implements sets unseen hashes.
Comments
Post a Comment