Alle Wednesday 30 January 2008, Adam A. ha scritto:
Hi if i want to count the number of times values are repeated in an
array how do i go about it…is there a method?
My solution is
list.sort
loop through list and compare one element to the next and count
repetitions.
is there a simpler way?
a = [2,4,6,2,1,3,4,6,4,1,2,3,1]
res = Hash.new(0)
a.each do |i|
res[i]+=1
end
p res
This creates a hash, which has a default value of 0 (that is, if a key
isn’t
included in the hash, the [] method returns 0). Then, there’s an
iteration on
all items of the array. For each element, the value of the hash item
corresponding to the array element is increased by one.
This can be written much more concisely as:
p a.inject(Hash.new(0)){|res, i| res[i]+=1; res}
if list[currElement] == list[currElement + 1]
Array#each_index or Array#each_with_index:
list.each_index do |i|
if list[i] == list[i+1]
…
endif
end
or
list.each_with_index do |element, i|
if e == list[i+1]
…
endif
end
Of course, in both cases you’d need to handle yourself the case of the
last
element (in which case, list[i+1] will return nil).
Another possibility, if you only need to access the item after the
current one
is to use each_cons:
require ‘enumerator’
a = [1,2,3,4]
a.each_cons(2){|i| p i}
=>
[1, 2]
[2, 3]
[3, 4]
I hope this helps
Stefano