È possibile utilizzare la stessa strategia indici multicolonna in database, se le colonne chiave possono essere ordinati (ad esempio, in Java, hanno bisogno di essere Comparable
) e può facilmente definire i valori massimi e minimi per tutti tranne il primo.
Un esempio con colonne interi:
public class Key implements Comparable<Key> {
int c1, c2, c3;
private static final int c2_min = Integer.MIN_VALUE;
private static final int c2_max = Integer.MAX_VALUE;
private static final int c3_min = Integer.MIN_VALUE;
private static final int c3_max = Integer.MAX_VALUE;
@Override
public int compareTo(Key o) {
if (c1!=o.c1) return Integer.compare(c1, o.c1);
if (c2!=o.c2) return Integer.compare(c2, o.c2);
return Integer.compare(c3, o.c3);
}
// constructor, equals, ...
}
e quindi è possibile ottenere tutte le voci per qualche valore k1
in c1
simili:
map.subMap(new Key(k1, Key.c2_min, 0), new Key(k1, Key.c2_max, 0));
Analogamente, utilizzando i primi due colonne:
map.subMap(new Key(k1, k2, Key.c3_min), new Key(k1, k2, Key.c3_max));
Puoi mostrarci alcuni casi di test? Qual è il tuo input e il tuo output? –
La domanda non è chiara .... – AmitG
Questo non è un problema standard. Consente di affrontare questo problema specifico dello scenario corrente per il tuo utilizzo. Puoi dire per favore qual è il tipo di dati di C1, C2 e C3? Se sono numeri interi, quale sarebbe la gamma di essi? – Saurabh