Вставка более чем одного поля данных в отсортированную структуру данных

Это не представляется возможным в текущих версиях PHP.

Хотя ReflectionProperty::setAccessible() делает , принимает логический аргумент, изменение, которое оно делает только позволяет самому Reflection получить доступ / не получить доступ к значению. Фактически это не изменяет доступность фактического свойства.

Как хакерское обходное решение для сохранения динамических свойств private, рассмотрите наличие свойств хранилища __set, которые на самом деле не существуют в выделенном частном массиве. Пример кода:

class Test {

    private $foo;
    public $bar;
    private $_properties;

    public function __get($prop) {
        if(property_exists($this, $prop))
            return $this->$prop;
        if(array_key_exists($prop, $this->_properties))
            return $this->_properties[$prop];
    }

    public function __set($prop, $value) {
        if(!property_exists($this, $prop)) {
            $this->_properties[$prop] = $value;
            echo 'SetDynamic: ', $prop, "\n";
            return;
        }
        $this->$prop = $value; 
        echo 'Set: ', $prop, "\n";
    }

}

Выполняется из интерактивной подсказки PHP:

php > $t = new Test;
php > $t->foo = 1;
Set: foo
php > $t->foo = 2;
Set: foo
php > $t->bar = 1;
php > $t->testorama = 1;
SetDynamic: testorama
php > $t->testorama = 2;
SetDynamic: testorama

Хотя это гарантирует, что внешний доступ всегда проходит через ваши методы __get и __set, это представляет проблему для внутреннего использования, так как теперь вам всегда дают два места для проверки динамических свойств. Вот почему это хакерское решение вместо реального решения.

0
задан Bee 21 February 2019 в 03:27
поделиться

1 ответ

Как правило, для вставки элемента требуется 3 шага:

  1. найти, куда вставить
  2. вставить его
  3. настроить структуру данных, если необходимо

Если элементы вставки имеют регулярность (как и все элементы равны, это сэкономит 1. locate where to insert время в связанном списке), но сложность по-прежнему O(n).

Если вставные элементы не имеют никакой регулярности , это достаточно случайно. Нет разницы между вставкой одной и вставкой партии.

Итак, одним словом, нет специальной структуры данных для пакетной вставки. но вы можете улучшить Constant Time Complexity в некоторых особых условиях.

PS: общая отсортированная структура данных представляет собой сбалансированное двоичное дерево, тратит O(logn) временную сложность при обновлении

0
ответ дан pwxcoo 21 February 2019 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: