Pakete, Repositories und App-Kategorien suchen

Paketdetailsv8.0.1

ordered_set

Eine einfache Implementierung einer geordneten Menge für Dart, die mehrere Elemente mit derselben Priorität zulässt.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
168.000
Likes
35
Pub-Punkte
160

Paket installieren

flutter pub add ordered_set

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Ein Dart-Paket, das eine geordnete Set-Implementierung bereitstellt, die mehrere Elemente mit identischer Priorität unterstützt. Es behält die Einfügereihenfolge für Elemente mit gleicher Priorität bei und ermöglicht vorhersehbare und effiziente Sortierung in Anwendungen, die geordnete Sammlungen erfordern. Ideal für Fälle, in denen doppelte Prioritäten erwartet werden, aber die Reihenfolge erhalten bleiben muss. Das Paket ist leichtgewichtig, kompatibel mit allen wichtigen Plattformen und lässt sich nahtlos in Flutter-Projekte über pub.dev integrieren.

Anwendungsfälle

  • Aufgabenplanung basierend auf Priorität
  • Geordnete Protokolle mit Duplikaten beibehalten
  • Prioritätswarteschlangen mit Tie-Breaking implementieren
  • Verwaltung von Ereignissequenzen mit gleicher Dringlichkeit
  • Benutzerdefiniertes Sortieren in Datenpipelines
  • Echtzeit-Datenverarbeitung mit Bestellbeschränkungen

Hauptmerkmale

  • Unterstützt mehrere Elemente mit gleicher Priorität
  • Behält die Einfüge-Reihenfolge innerhalb gleicher Prioritäten bei
  • Plattformübergreifende Kompatibilität
  • Leichtgewichtig und einfach zu integrieren
  • Effiziente Suche und Einfügung
  • Keine externen Abhängigkeiten

Geeignet für

  • Entwickler, die geordnete Sammlungen mit doppelten Prioritäten benötigen
  • Anwendungen, die eine deterministische Reihenfolge erfordern
  • Flutter-Apps mit komplexen Anforderungen an die Daten-Sortierung
  • Systeme, die zeitkritische oder prioritätsbasierte Arbeitsabläufe verwalten
  • Ingenieure bauen benutzerdefinierte Warteschlangen- oder Puffersysteme

Hinweise

  • Aufgrund von Leistungskompromissen nicht geeignet für Hochfrequenz-Updates
  • Beschränkt auf einzeilige Sortierung (keine mehrstufige Sortierung)
  • Erfordert manuelle Handhabung von Prioritätsänderungen
  • Am besten geeignet für datenmäßige Datensätze mittlerer Größe
  • Unterstützt native Rückwärtsiteration nicht
  • Kann bei vielen Duplikaten mehr Speicher verbrauchen als Standardmengen

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

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!

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden