После назначения this.reportData
вы хотите дать Angular шанс обновить DOM, прежде чем начинать запрашивать дочерние узлы.
Вы можете позвонить ChangeDetectorRef.detectChanges()
, чтобы запустить прогон обнаружения изменений, прежде чем запрашивать обновленный DOM:
constructor(private cd: ChangeDetectorRef, private sanitizer: DomSanitizer) {}
// ...
this.reportData = this.sanitizer.bypassSecurityTrustHtml(html);
// Update the DOM
this.cd.detectChanges();
// Now we can access the updated DOM
console.log(this.reportDisplayHost.nativeElement.querySelector('chart'));
А вот пример StackBlitz .
Реализация хэш-таблицы Python (спорный очень быстрый) использует фиктивные элементы для маркировки удалений. Как Вы растете или уменьшаетесь или таблица (предполагающий, что Вы не делаете таблицы фиксированного размера), можно отбросить макеты одновременно.
, Если у Вас есть доступ к копии, взгляните на статью в Красивый Код о реализации.
Лучшие общие решения, которые я могу придумать, включают:
Общая техника, когда время является фактором, должна иметь вторую таблицу удаленных объектов и очистить основную таблицу, когда у Вас есть время. Наиболее часто используемый в поисковых системах.
Это зависит от того, как Вы обрабатываете переполнение и ли (1) удаляемый объект находится в слоте переполнения или не и (2) если существуют объекты переполнения вне удаляемого объекта, есть ли у них ключ хеша удаляемого объекта или возможно некоторый другой ключ хеша. [Забыв, что двойное условие является общим источником ошибок в реализациях удаления.]
, Если коллизии переполняются в связанный список, это довольно легко. Вы или открываетесь список (который, возможно, пошел пустой), или удаление участника с середины или конца связанного списка. Те - забава и не особенно трудные. Может быть другая оптимизация для предотвращения чрезмерных выделений памяти и освобождения для создания этого еще более эффективным.
Для линейного зондирования, Knuth предлагает, чтобы простой подход имел способ отметить слот как пустой, удаленный или занятый. Mark удаленный слот жителя, как удалено так, чтобы переполнение линейным зондированием пропустило мимо него, но если вставка необходима, можно заполнить первый удаленный слот, который Вы прошли по [Искусство Программирования, vol.3: Сортируя и Поиск, разделите 6.4 Хеширований, p. 533 (редактор 2)]. Это предполагает, что удаления довольно редки.
Knuth дает хорошее улучшение как Алгоритм R6.4 [стр 533-534], который вместо этого отмечает ячейку как пустую, а не удаленную, и затем находит способы подвинуть записи таблицы поближе назад к их начально-тестовому местоположению путем перемещения дыры, которая была просто сделана, пока это не заканчивается рядом с другой дырой.
Knuth предостерегает, что это переместит существующие все еще занятые записи слота и не является хорошей идеей, если указатели на слоты будут сохранены на за пределами хэш-таблицы. [Если Вы собрали из мусора - или другие управляемые ссылки в слотах, это в порядке для перемещения слота, так как это - ссылка, которая используется за пределами таблицы, и не имеет значения, где слот, который ссылается на тот же объект, находится в таблице.]