Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev8.0.1

ordered_set

Uma implementação simples de um Conjunto Ordenado para Dart que permite múltiplos itens com a mesma prioridade.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
156 mil
Curtidas
35
Pontos Pub
160

Instalar pacote

flutter pub add ordered_set

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Um pacote Dart que fornece uma implementação de conjunto ordenado com suporte a múltiplos itens com prioridade idêntica. Mantém a ordem de inserção para elementos com a mesma prioridade, permitindo classificação previsível e eficiente em aplicações que exigem coleções ordenadas. Ideal para casos de uso onde se espera prioridades duplicadas, mas a preservação da ordem é essencial. O pacote é leve, compatível com todas as principais plataformas e integra-se perfeitamente aos projetos Flutter por meio do pub.dev.

Casos de uso

  • Agendamento de tarefas baseado em prioridade
  • Manter registros ordenados com duplicatas
  • Implementando filas de prioridade com desempate
  • Gerenciando sequências de eventos com urgência igual
  • Classificação personalizada em pipelines de dados
  • Processamento de dados em tempo real com restrições de ordem

Principais recursos

  • Suporta múltiplos itens com mesma prioridade
  • Preserva a ordem de inserção dentro de prioridades iguais
  • Compatibilidade multiplataforma
  • Leve e fácil de integrar
  • Busca e inserção eficientes
  • Sem dependências externas

Indicado para

  • Desenvolvedores que precisam de coleções ordenadas com prioridades duplicadas
  • Aplicações que exigem ordenação determinística
  • Aplicativos Flutter com necessidades complexas de classificação de dados
  • Sistemas que gerenciam fluxos de trabalho sensíveis ao tempo ou impulsionados por prioridades
  • Engenheiros construindo sistemas personalizados de fila ou buffer

Considerações

  • Não é adequado para atualizações de alta frequência devido a compromissos de desempenho
  • Limitado à ordenação por chave única (sem classificação multi-nível)
  • Requer manipulação manual de alterações de prioridade
  • Mais adequado para conjuntos de dados de tamanho moderado
  • Não suporta iteração reversa nativamente
  • Pode consumir mais memória do que conjuntos padrão quando existem muitos duplicados

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

ordered_set

Pub Version Build Status Coverage Status

A simple implementation for an Ordered Set for Dart.

It accepts either a comparator function that compares items for their priority or a mapper function that maps items to their priority.

Unlike Dart's SplayTreeSet or SplayTreeMap classes, it allows for several different elements with the same "priority" to be added.

It also implements Iterable, allowing you to iterate the contents (in order) in O(n) (no additional overhead).

Usage

A simple usage example:

  import 'package:ordered_set/ordered_set.dart';

  main() {
    final items = OrderedSet.simple<num, int>();
    items.add(2);
    items.add(1);
    print(items.toList()); // [1, 2]
  }

But it can accept multiple items with the same priority:

  import 'package:ordered_set/ordered_set.dart';

  main() {
    final items = OrderedSet.mapping<String, Person>((p) => p.name);
    items.add(Person('Alice', 'Engineering'));
    items.add(Person('Bob', 'Accounting'));
    items.add(Person('Alice', 'Marketing'));
    print(items.toList()); // [Alice, Alice, Bob]
  }

Comparing

In order to assist the creation of Comparators, the Comparing class can be used:

  // sort by name length
  final people = OrderedSet.comparing<Person>(Comparing.on((p) => p.name.length));

  // sort by name desc
  final people = OrderedSet.comparing<Person>(Comparing.reverse(Comparing.on((p) => p.name)));

  // sort by role and then by name
  final people = OrderedSet.comparing<Person>(Comparing.join([(p) => p.role, (p) => p.name]));

Note that you could instead just create a MappingOrderedSet instead:

  final people = OrderedSet.mapping<num, Person>((p) => p.name.length);
  // ...

Mapping vs Comparing

There are two main implementations of the OrderedSet interface:

  • ComparingOrderedSet: the simplest implementation, takes in a Comparator and does not cache priorities. It uses Dart's SplayTreeSet as a backing implementation.
  • MappingOrderedSet: a slightly more advanced implementation that takes in a mapper function (maps elements to their priorities) and caches them. It uses Dart's SplayTreeMap as a backing implementation.

In order to create an OrderedSet, however, you can just use the static methods on the interface itself:

  • OrderedSet.comparing<E>([comparator]): creates a ComparingOrderedSet with the given Comparator.
  • OrderedSet.mapping<K, E>([mapper]): creates a MappingOrderedSet with the given mapper function.
  • OrderedSet.comparable<K, E>(): if E extends Comparable<K>, this is a simpler way of creating a MappingOrderedSet with identity mapping.
  • OrderedSet.simple<E>(): if E extends Comparable<E>, this is an even simpler way of creating a MappingOrderedSet with identity mapping.

Querying

You can [register] a set of queries, i.e., predefined sub-types, whose results, i.e., subsets of this set, are then cached. Since the queries have to be type checks, and types are runtime constants, this can be vastly optimized.

You can then filter by type by using the [query] method (or using [whereType]; which is overridden).

Note that you can change [strictMode] to allow for querying for unregistered types; if you do so, the registration cost is payed on the first query.

Contributing

All contributions are very welcome! Please feel free to create Issues, help us with PR's or comment your suggestions, feature requests, bugs, et cetera. Give us a star if you liked it!

Categorias

Repositório-fonte

Projetos que usam este pacote