How to find and return a duplicate value in array
a = ["A", "B", "C", "B", "A"]
a.detect{ |e| a.count(e) > 1 }
I know this isn't very elegant answer, but I love it. It's beautiful one liner code. And works perfectly fine unless you need to process huge data set.
Looking for faster solution? Here you go!
def find_one_using_hash_map(array)
map = {}
dup = nil
array.each do |v|
map[v] = (map[v] || 0 ) + 1
if map[v] > 1
dup = v
break
end
end
return dup
end
It's linear, O(n), but now needs to manage multiple lines-of-code, needs test cases, etc.
If you need an even faster solution, maybe try C instead.
And here is the gist comparing different solutions: https://gist.github.com/naveed-ahmad/8f0b926ffccf5fbd206a1cc58ce9743e
Duplicate array elements in Ruby
How about
rangers.zip(rangers).flatten
using Array#zip
and Array#flatten
?
A solution that might generalize a bit better for your second request might be:
rangers.flat_map { |ranger| [ranger] * 2 }
using Enumerable#flat_map
.
Here you can just replace the 2
with any value or variable.
Find a Duplicate in an array Ruby
How I wish we had a built-in method Array#difference
:
class Array
def difference(other)
h = other.tally
reject { |e| h[e] > 0 && h[e] -= 1 }
end
end
though @user123's answer is more straightforward. (Array#difference
is probably the more efficient of the two, as it avoids the repeated invocations of count
.) See my answer here for a description of the method and links to its use.
In a nutshell, it differs from Array#- as illustrated in the following example:
a = [1,2,3,4,3,2,4,2]
b = [2,3,4,4,4]
a - b #=> [1]
a.difference b #=> [1, 3, 2, 2]
For the present problem, if:
arr = [1,2,3,4,3,4]
the duplicate elements are given by:
arr.difference(arr.uniq).uniq
#=> [3, 4]
Getting the indexes of duplicate elements in arrays (Ruby)
Taking a page from procedural languages, we could write:
fruits.each_index.select { |i| fruits[i]=="apples" }
#=> [0, 2, 4]
How to split an array on duplicate elements in Ruby
Enumerable#slice_when does that.
arr = ['A', 'B', 'C', 'C', 'D', 'D', 'F']
p arr.slice_when{|a,b| a==b}.to_a
# =>[["A", "B", "C"], ["C", "D"], ["D", "F"]]
How to count duplicate elements in a Ruby array
The following code prints what you asked for. I'll let you decide on how to actually use to generate the hash you are looking for:
# sample array
a=["aa","bb","cc","bb","bb","cc"]
# make the hash default to 0 so that += will work correctly
b = Hash.new(0)
# iterate over the array, counting duplicate entries
a.each do |v|
b[v] += 1
end
b.each do |k, v|
puts "#{k} appears #{v} times"
end
Note: I just noticed you said the array is already sorted. The above code does not require sorting. Using that property may produce faster code.
How do I detect duplicate values within an array in Ruby?
You can create a hash to store number of times any element is repeated. Thus iterating over array just once.
h = Hash.new(0)
['a','b','b','c'].each{ |e| h[e] += 1 }
Should result
{"a"=>1, "b"=>2, "c"=>1}
Remove duplicate elements from array in Ruby
array = array.uniq
uniq
removes all duplicate elements and retains all unique elements in the array.
This is one of many beauties of the Ruby language.
Related Topics
Fetch VS. [] When Working with Hashes
Installed Memcached via Homebrew, How to Start and Stop Server
Create .Ruby-Version and .Ruby-Gemset with Rvm
Difference Between Block and &Block in Ruby
Variables in Ruby Method Names
How to Insert Erb-Tags with Vim
Gracefully Shutting Down Sidekiq Processes
Modern Tools for Ruby/Rails for Building an Achievement System
Cocoapods Not Working in MACos High Sierra
Get File Name and Extension in Ruby
Possible to Access the Index in a Hash Each Loop
Where to Place Private Methods in Ruby
Capistrano Deploy Fails After I Changed the Repository Url
Listen Error: Unable to Monitor Directories for Changes
Programming a Simple Irc (Internet-Relay-Chat) Client
Sorting an Array of Objects in Ruby by Object Attribute
Rspec Controller Testing - Blank Response.Body
How to Turn on SQL Debug Logging for Activerecord in Rspec Tests