Rank

A Dart package that helps to implement a string index.

Overview

Before:

class Element {
  const Element(..., this.position);

  ...
  final int position;  // 4
}

With a order number based ranking system, re-ordering a element of a list may require updating all elements of the list, which is O(n).

element position
... ...
apple 3
from _ to here Oh ho!
No room between 3 and 4.
pear 4
raspberry 5

Well, let's try adding zeros.

element position
... ...
apple 300
from _ to here Now, you can add 99 elements
before changing anything.
pear 400
raspberry 500

What if we don't use numbers?


With rank

class Element {
  const Element(..., this.rank);
  ...
  
  final String rank; // knar
}

Using a string-based range, this is done with O(1). All you have to do is to update the rank field of the reordered element.

element rank
... ...
apple kra
a sweet fruit added kran
pear krb
raspberry krc

Then, to get your sorted list you could perform this query in your database:

SELECT * FROM "_" ORDER BY "rank";

Usage

First, add the plugin rank to your pubspec.yaml file:

dependencies:
  rank: ^0.1.1

Import rank in files that it will be used:

import 'package:rank/rank.dart';

Next, you must initialize the plugin:

Rank rank = Rank();

To get a rank use generate

sweetFruitRank = rank.generate(previous: appleRank, next: pearRank);

Issues

Please file any issues, bugs or feature request as an issue on our GitHub page.

Contributing

If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature or you'd like an easier or better way to do something), consider opening a pull request.

Libraries

rank