Check if two arrays have the same contents (in any order)
This doesn't require conversion to set:
a.sort == b.sort
Ruby: Array contained in Array, any order
def f a,b
(a-b).empty?
end
How to determine if one array contains all elements of another array
a = [5, 1, 6, 14, 2, 8]
b = [2, 6, 15]
a - b
# => [5, 1, 14, 8]
b - a
# => [15]
(b - a).empty?
# => false
Array include every value from another array?
You can simply subtract one array from another, if the result is an empty array, all values are contained:
cheeses = %w[brie feta]
foods = %w[feta pizza brie bread]
(cheeses - foods).empty?
#=>true
Array include any value from another array?
(cheeses & foods).empty?
As Marc-André Lafortune said in comments, &
works in linear time while any?
+ include?
will be quadratic. For larger sets of data, linear time will be faster. For small data sets, any?
+ include?
may be faster as shown by Lee Jarvis' answer -- probably because &
allocates a new Array while another solution does not and works as a simple nested loop to return a boolean.
Determining whether one array contains the contents of another array in ruby
You can use each_cons method:
arr = [1, 2, 3, 4, 5]
[1, 5, 8, 2, 3, 4, 5].each_cons(arr.size).include? arr
In this case it will work for any elements.
Order an array which contains OpenStructs by another array
Not clear whether you have numbers or strings as the attribute. If the former, then do
order.map!(&:to_i)
first. Then do:
a.sort_by!{|e| order.index(e.id)}
If there are no duplicates, do instead:
order & a.map(&:id)
Ruby - Does array A contain all elements of array B
This should work for what you need:
(a & b) == b
Sort an array of arrays based on the order in another array
h = x.to_h
# => {"ready"=>5,
# "shipped"=>1,
# "pending"=>1,
# "refunded"=>1,
# "delivered"=>23,
# "scheduled"=>1,
# "canceled"=>51}
order_array.map{|key| [key, h[key]] if h.key?(key)}.compact
# => [["ready", 5],
# ["shipped", 1],
# ["scheduled", 1],
# ["delivered", 23],
# ["canceled", 51],
# ["refunded", 1]]
or
h = x.to_h{|k, v| [k, [k, v]]}
#=> {"ready"=>["ready", 5],
# "shipped"=>["shipped", 1],
# "pending"=>["pending", 1],
# "refunded"=>["refunded", 1],
# "delivered"=>["delivered", 23],
# "scheduled"=>["scheduled", 1],
# "canceled"=>["canceled", 51]}
order_array.map{|k| h[k]}.compact
#=> [["ready", 5],
# ["shipped", 1],
# ["scheduled", 1],
# ["delivered", 23],
# ["canceled", 51],
# ["refunded", 1]]
or
h = x.to_h{|k, v| [k, [k, v]]}
#=> {"ready"=>["ready", 5],
# "shipped"=>["shipped", 1],
# "pending"=>["pending", 1],
# "refunded"=>["refunded", 1],
# "delivered"=>["delivered", 23],
# "scheduled"=>["scheduled", 1],
# "canceled"=>["canceled", 51]}
h.values_at(*order_array).compact
#=> [["ready", 5],
# ["shipped", 1],
# ["scheduled", 1],
# ["delivered", 23],
# ["canceled", 51],
# ["refunded", 1]]
Determine if one array contains all elements of another array
class Array
def contains_all? other
other = other.dup
each{|e| if i = other.index(e) then other.delete_at(i) end}
other.empty?
end
end
Related Topics
How to Convert Boolean Values to Integers
Rails ( Set_No_Cache Method) Cannot Disable Browser Caching in Safari and Opera
How Do Version Numbers Work for Mri Ruby
How Can Bundler/Gemfile Be Configured to Use Different Gem Sources During Development
How Might I Simulate a Private Browsing Experience in Watir? (Selenium)
Rbenv Install Ruby Build Failed
What Does "Temps.Each(&:Valid)" Mean in Ruby
React Error (Only a Reactowner Can Have Refs.)
Subtract Values in Hash from Corresponding Values in Another Hash
Ruby Inside JavaScript Block [Slim Template]
Tcp Socket Communication Between Processes on Heroku Worker Dyno
Bootstrap Datepicker Default Value Simple_Form_For
Skip/Disable Force_Ssl for Particular Controller in Rails
Optional Parens in Ruby for Method with Uppercase Start Letter