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.