Как отфильтровать наблюдаемую переданную в угловую составляющую?

Предполагая, что информация о распределении элементов отсутствует (мы не знаем, что какой-либо элемент более распространен, чем другие), мы можем использовать следующую технику.

Минимальный объем информации, необходимой для хранения одного из 4 значений - всего 2 бита: 00, 01, 10 или 11 могут представлять 4 отдельных элемента на карте. Затем, если у вас есть n символов в вашей строке, вы можете преобразовать это в битовую строку длины 2n, например, строка 12313 становится битовой строкой 01 10 11 01 11 (с добавлением пробелов для ясности).

Если вы используете базовое кодирование строки 36 (используя 10 цифр плюс 26 символов), вы можете повернуть 5 бит за один раз в один символ (начиная с 2 ^ 5 = 32 и = 36). В результате получается строка из 2/5 * n символов или сжатие 2.5x по сравнению с вашей исходной строкой.

Вы можете выжать больше из этой технологии, используя другую кодировку с более разными символами. Например, 10 цифр + 26 букв в верхнем регистре + 26 строчных букв + 2 символа пунктуации = 64 символа, поэтому вы можете превратить 6 бит в один печатный символ ASCII с использованием такого типа кодирования.


Если распределение элементов очень искажено (например, 0 очень распространено, а 1, 2 и 3 очень редки), то вы можете взглянуть на кодировку Хаффмана . Однако я предлагаю сначала использовать описанный выше подход, поскольку он намного проще и понятнее.

1
задан Benny 18 January 2019 в 19:29
поделиться

2 ответа

Как и другие уже упомянутые ответы, Observable еще не определена в конструкторе. Конструктор должен использоваться только для DI или присвоений imho.

Я бы предложил не передавать наблюдаемое как входные данные вашим дочерним компонентам, а передавать его как «просто» массив. Это сделает ваше приложение быстрее, проще в работе и проще в тестировании. Чтобы передать его как массив, используйте канал async.

<pv-family-list [planMembers]="planMembers$ | async"><pv-family-list/>
0
ответ дан timdeschryver 18 January 2019 в 19:29
поделиться

Он не определен, потому что он не инициализирован. Вы должны выполнить фильтрацию в перехватчиках ngOnInit и ngOnChanges или использовать метод set

_planMembers:  Observable<PlanMember[]>;

@Input
set planMembers(planMembers: Observable<PlanMember[]]) {
    this._planMembers = planMembers;
    this._planMembers
        .pipe(map( (members) =>  members.filter(m => m.userId !== 'Owner') 
    )).subscribe();

}

Это будет вызываться каждый раз, когда изменяется входное значение planMembers.

0
ответ дан Patryk Błaziński 18 January 2019 в 19:29
поделиться
Другие вопросы по тегам:

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