【问题标题】:How to compare Uint8List in Dart à la nodejs Buffer.compare?如何比较 Dart à la nodejs Buffer.compare 中的 Uint8List?
【发布时间】:2020-05-26 05:55:11
【问题描述】:

我希望对包含 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 ) 比较它们

我如何在 Dart 中做到这一点?

【问题讨论】:

    标签: dart


    【解决方案1】:

    我不知道任何现有的实现。 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));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      相关资源
      最近更新 更多