Search for duplicate elements in the array

R

Ruhe

Hello.
I have a pretty good working Java method, which sorts array of
strings, then searches for duplicate elements. If element is
duplicated output shows ">> hello *20 times" for example.

private void printArray()

{

String arr[] = str.split("\\n+");



Arrays.sort(arr);



for (int j = 0; j < arr.length; j++)

{

int count = 1;

for (int i = j + 1; i < arr.length; i++)

{

if (arr.compareTo(arr[j]) == 0)

{

count++;

j++;

}

}

if (count > 1)

{

System.out.println(">> " + arr[j] + " *" + count + " times");

} else

{

System.out.println(">> " + arr[j]);

}

}

}


But the problem is that I can't write this method in Ruby! How to make
this in Ruby?
 
R

Robert Klemme

Hello.
I have a pretty good working Java method, which sorts array of
strings, then searches for duplicate elements. If element is
duplicated output shows ">> hello *20 times" for example.

private void printArray()

{

String arr[] = str.split("\\n+");



Arrays.sort(arr);



for (int j = 0; j < arr.length; j++)

{

int count = 1;

for (int i = j + 1; i < arr.length; i++)

{

if (arr.compareTo(arr[j]) == 0)

{

count++;

j++;

}

}

if (count > 1)

{

System.out.println(">> " + arr[j] + " *" + count + " times");

} else

{

System.out.println(">> " + arr[j]);

}

}

}


But the problem is that I can't write this method in Ruby! How to make
this in Ruby?


This is way inefficient. You rather want a counter per element stored
in a Map (HashMap or TreeMap in Java).

dups = Hash.new 0
arr.each {|x| dups[x]+=1}
puts dups.select {|k,v| v>1}

You can have it on one line if you prefer:

puts arr.inject(Hash.new(0)) {|d,x| d[x]+=1; d}.select {|k,v| v>1}

Kind regards

robert
 
R

Ruhe

This is way inefficient. You rather want a counter per element stored
in a Map (HashMap or TreeMap in Java).

dups = Hash.new 0
arr.each {|x| dups[x]+=1}
puts dups.select {|k,v| v>1}

You can have it on one line if you prefer:

puts arr.inject(Hash.new(0)) {|d,x| d[x]+=1; d}.select {|k,v| v>1}

Kind regards

robert

Thanks a lot! This is a new level of programing knowledge for me.
I'll try to make something like this with HashMap in Java.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,577
Members
45,054
Latest member
LucyCarper

Latest Threads

Top