如何在 Dart à la nodejs Buffer.compare 中比较 Uint8List?



我正在寻找一个包含Uint8List的列表。

var l = Uint8List.fromList([0, 10]);
var l2 = Uint8List.fromList([0, 33]);

我希望能够像在nodejs中使用Buffer.compare(https://www.w3schools.com/nodejs/met_buffer_compare.asp(一样比较它们

如何在飞镖中执行此操作?

我不知道任何现有的实现。Buffer,compare的文档没有具体说明它如何对缓冲区进行排序。 我假设这是正常的低索引到高索引词典顺序。

我会为此编写一个函数:

int compareLists<T extends Comparable<T>>(List<T> a, List<T> b) {
var aLength = a.length;
var bLength = b.length;
var minLength = aLength < bLength ? aLength : bLength;
for (var i = 0; i < minLength; i++) {
var result = a[i].compareTo(b[i]);
if (result != 0) return result;
}
return aLength - bLength;
}
int compareListsBy<T>(List<T> a, List<T> b, int compare(T a, T b)) {
var aLength = a.length;
var bLength = b.length;
var minLength = aLength < bLength ? aLength : bLength;
for (var i = 0; i < minLength; i++) {
var result = compare(a[i], b[i]);
if (result != 0) return result;
}
return aLength - bLength;
}

甚至可能使用扩展方法:

extension CompareListExtension<T> on List<T> {
int compare(List<T> other, int compare(T a, T b)) =>
compareListsBy<T>(thus, other, compare);
}
extension CompareListComparableExtension<T extends Comparable<T>> on List<T> {
int compare(List<T> other, [int compare(T a, T b)]) =>
compareListsBy<T>(this, other, compare ?? (a, b) => a.compareTo(b));
}

最新更新