|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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? |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
On 16 , 15:32, Robert Klemme <shortcut...@googlemail.com> wrote:
> 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. |
|
![]() |
| Outils de la discussion | |
|
|