Robert Klemme
9/16/2007 11:33:00 AM
On 16.09.2007 13:04, Ruhe wrote:
> 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[i].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