Bạn có thể sử dụng chiến lược tương tự như chỉ số multicolumn trong cơ sở dữ liệu, nếu cột quan trọng của bạn có thể được đặt hàng (ví dụ, trong Java, họ cần phải là Comparable
) và có thể dễ dàng xác định giá trị tối đa và tối thiểu cho tất cả trừ giá trị đầu tiên.
Một ví dụ với các cột số nguyên:
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, ...
}
và sau đó bạn có thể nhận được tất cả các mục cho một số giá trị k1
trong c1
như thế này:
map.subMap(new Key(k1, Key.c2_min, 0), new Key(k1, Key.c2_max, 0));
Tương tự như vậy, sử dụng hai cột đầu tiên:
map.subMap(new Key(k1, k2, Key.c3_min), new Key(k1, k2, Key.c3_max));
Bạn có thể chỉ cho chúng tôi một số trường hợp kiểm tra không? Đầu vào của bạn là gì và đầu ra của bạn? –
Câu hỏi không rõ ràng .... – AmitG
Đây không phải là vấn đề tiêu chuẩn. Cho phép tiếp cận vấn đề này cụ thể cho kịch bản hiện tại cho việc sử dụng của bạn. Bạn có thể vui lòng cho biết loại dữ liệu của C1, C2 và C3 là gì? Nếu chúng là số nguyên thì đó sẽ là phạm vi của chúng? – Saurabh