Способом достижения этой цели может быть тройная вложенная хэш-карта.Или hashmap hashmaps hashmaps.
Псевдо-код для запроса будет выглядеть примерно так:
//You would call this method to search.
string query(string param1, string param2, string param3)
{
// The essence of the logic is, if you give a value for param3,
// then it will do the subquery of the hashMap that param3
// is the key of, if you don't supply a value (or provide the wildcard)
// it will search all the different hashmaps of the parent hashmap.
// See below for an example
if param1 != WILDCARD
then subquery1(hashmap[param1], string param2, string param3);
else for each x in hashmap, subquery1(x,string param2, string param3)
}
string subquery1(hashmap[hashmap[]] maps, string param2, string param3)
{
// The essence of the logic is, if you give a value for param2,
// then it will do the subquery of the hashMap that param2
// is the key of, if you don't supply a value (or provide the wildcard)
// it will search all the different hashmaps of the parent hashmap.
if param2 != WILDCARD
then subquery2(maps[param2], string param3);
else for each x in maps, subquery2(x, string param3)
}
string subquery2(hashmap[] maps, string param3)
{
if param3 != WILDCARD
then return maps[param3]
else for each x in maps, return maps[param3]
}
Очевидно, вам нужно определить, разрешено ли использовать несколько значенийвернулся и как вы хотите решить эту проблему.Также вам нужно определить, является ли параметр 3 обнуляемым?Формулировка проблемы довольно расплывчата, но я приложил все усилия, чтобы ответить на вопрос, как мне кажется, ваша проблема.
Примером может быть добавление следующих значений в вашу хэш-карту.
key1, key2,key3 = value1
key1, key2, key4 = value2
Если вы искали key1, *, key3, вы получите возвращаемое значение 1.
Если вы искали key1, *, *, вы получите значение1 и возвращенное значение2.
Обновление:
Когда вы вызываете query ("key1", "", "key3");
Так как param1 действителен (не подстановочный знак), мы вызываемsubquery1 (hashmap ["key1"], "", "key3");
Прежде чем мы перейдем к подзапросу1, оценивается hashMap ["key1"], но он возвращает другой hashmap,
позволяет вызватьэто hashmap hashmap2 [].Таким образом, подзапрос1 фактически вызывается с помощью (hashmap2 [], "*", "key3");
Теперь мы находимся в подзапросе 1.
Поскольку param2 равен "*", мы затем перебираем все значения hashmap2 [],
для каждого hashmap3 [] в hashmap2 [], мы вызываем subquery3(hashmap3 [], "key3");
На этом этапе, поскольку param3 действителен, мы вызываем hashmap3 ["key3"] и получаем значение value1;