Как передать параметры с history.push (поиск + путь) в реакции-маршрутизатор v4?

Я могу придумать ряд возможных решений для более общей проблемы, где диапазоны неравномерны и есть «дырки». Самые простые:

  1. Просто заполните Map для всех допустимых значений ключа, с сопоставлением нескольких ключей с тем же значением. Предполагая, что вы используете HashMaps, это должен быть самый эффективный (O (1) поиск), хотя у вас больше времени на настройку, и вы используете больше места.
  2. Используйте навигационную карту и используйте floorEntry(key) для поиска.

Вот решение, использующее NavigableMaps, которое допускает «дыры» в отображении.

Это решение должно быть менее эффективным (O (log (N) »)
private static class Range {
   public int upper, value;
   ...
}

NavigableMap<Integer, Range> map = new TreeMap<Integer, Range>();
map.put(0, new Range(3, 0));       // 0..3     => 0
map.put(5, new Range(10, 1));      // 5..10    => 1
map.put(100, new Range(200, 2));   // 100..200 => 2

// To do a lookup for some value in 'key'
Map.Entry<Integer,Range> entry = map.floorEntry(key);
if (entry == null) {
    // too small
} else if (key <= entry.getValue().upper) {
    return entry.getValue().value;
} else {
    // too large or in a hole
}

С другой стороны, если нет «дырок», решение проще:

NavigableMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
map.put(0, 0);    // 0..4     => 0
map.put(5, 1);    // 5..10    => 1
map.put(11, 2);   // 11..200  => 2

// To do a lookup for some value in 'key'
if (key < 0 || key > 200) {
    // out of range
} else {
   return map.floorEntry(key).getValue();
}
1
задан dev_jun 18 January 2019 в 14:25
поделиться