View Full Version : [java] confronto tra array di stringhe
antoniod82
10-09-2007, 08:29
Ho 2 vettori di stringhe di cui uno è un sottinsieme dell'altro.
Esiste un metodo che mi ritorni un terzo array contenente le stringhe che sono in quello con + più stringhe ma nn nell'altro??
grazie.
Ho 2 vettori di stringhe di cui uno è un sottinsieme dell'altro.
Esiste un metodo che mi ritorni un terzo array contenente le stringhe che sono in quello con + più stringhe ma nn nell'altro??Se intendi un qualche metodo nel framework standard di Java, no non mi risulta che ci sia.
Ma puoi certamente fartelo tu, non è affatto difficile.
EDIT: ti dò anche un aiuto, se questa elaborazione la fai passando attraverso una collection (es. LinkedList) fai tutto in 6 righe di codice pulite pulite senza fare neanche 1 loop.
antoniod82
10-09-2007, 19:57
me ne sono uscito in 5 righe ma con 2 loop:
1. nel primo sostituisco nell'array + grande un carattere "x" al posto degli elementi in comune;
2. nel secondo mi costruisco un array scartando dall'ultimo gli elementi uguali a "x".
ieri ho messo un altro thread, nn so se l'hai letto, mica sai se si può creare il diagramma UML di un progetto direttamente in JBuilder??
grazie e alla prossima,
Antonio
me ne sono uscito in 5 righe ma con 2 loop:
1. nel primo sostituisco nell'array + grande un carattere "x" al posto degli elementi in comune;
2. nel secondo mi costruisco un array scartando dall'ultimo gli elementi uguali a "x".Beh, scusa se lo dico ma questa è una gran boiata. Ma se ti piace così .....
Si potrebbe fare (come avevo detto prima) usando solamente le collezioni:
public static String[] arrayAMinusB (String[] a, String[] b)
{
LinkedList<String> list1 = new LinkedList<String> ();
LinkedList<String> list2 = new LinkedList<String> ();
Collections.addAll (list1, a);
Collections.addAll (list2, b);
list1.removeAll (list2);
return list1.toArray (new String[list1.size()]);
}Così è estremamente pulito ed elegante.
Se si volesse farlo senza usare in alcun modo le collezioni, si potrebbe fare così:
public static String[] arrayAMinusB (String[] a, String[] b)
{
String[] v = a.clone ();
int n = 0;
main:
for (int i = 0; i < v.length; i++)
{
for (int j = 0; j < b.length; j++)
if (v[i] == b[j])
continue main;
v[n++] = v[i];
}
String[] r = new String[n];
System.arraycopy (v, 0, r, 0, n);
return r;
}
Se poi si volesse realizzare una soluzione intermedia che utilizza una collezione, si potrebbe fare così:
public static String[] arrayAMinusB (String[] a, String[] b)
{
LinkedList<String> list = new LinkedList<String> ();
main:
for (int i = 0; i < a.length; i++)
{
for (int j = 0; j < b.length; j++)
if (a[i] == b[j])
continue main;
list.add (a[i]);
}
return list.toArray (new String[list.size()]);
}
E nota che nessuna delle tre soluzioni va ad alterare in alcun modo gli array originali. Insomma .... di soluzioni migliori della tua ce ne sono.
anche perchè se poi nell'array c'è già una stringa contenente solo "x" non funziona più niente!
antoniod82
17-09-2007, 03:12
caro andbin,
ti confermi maestro.
grazie
antoniod82
17-09-2007, 03:13
(da cancellare)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.