Frequenza di Word in perle di programmazione
-
02-10-2019 - |
Domanda
In "Perle di programmazione" Ho incontrato il seguente problema. La domanda è questa: "Le parole di stampa in ordine decrescente di frequenza". A quanto ho capito problema è questo. Supponiamo che ci sia un dato array di stringhe, chiamiamolo s
(parole che ho scelto a caso, non importa),
String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"};
Si vede che stringa "gatto" si verifica 4 volte, "Fox" 3 volte e "cane" 2 volte. Così il risultato desiderato sarà questo:
cat
fox
dog
Ho scritto il seguente codice in Java:
import java.util.*;
public class string {
public static void main(String[] args){
String s[]={"fox","cat","cat","fox","dog","cat","fox","dog","cat"};
Arrays.sort(s);
int counts;
int count[]=new int[s.length];
for (int i=0;i<s.length-1;i++){
counts=1;
while (s[i].equals(s[i+1])){
counts++;
}
count[i]=counts;
}
}
}
Ho ordinato l'array e ha creato una matrice di conteggio dove scrivo il numero di occorrenze di ogni parola in serie.
Il mio problema è che in qualche modo l'indice dell'elemento dell'array intero e l'elemento di matrice stringa non è la stessa. Come posso stampare le parole secondo gli elementi massimi della matrice di interi?
Soluzione
Per tenere traccia del conteggio di ogni parola, userei una mappa che traccia una parola per conteggio attuale esso è.
String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"};
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : s) {
if (!counts.containsKey(word))
counts.put(word, 0);
counts.put(word, counts.get(word) + 1);
}
Per stampare il risultato, passare attraverso le chiavi nella mappa e ottenere il valore finale.
for (String word : counts.keySet())
System.out.println(word + ": " + (float) counts.get(word) / s.length);