【问题标题】:Dart map of 2 lists to sort要排序的 2 个列表的 Dart 映射
【发布时间】:2020-07-04 21:54:12
【问题描述】:

我有 2 个列表: distancestring[1][3],取值如下:

distancestring[0][0]=3.4
distancestring[0][1]=2
distancestring[0][2]=1.1
distancestring[1][0]=5
distancestring[1][1]=4.2

和imagestring[1][3],具有以下值:

imagestring[0][0]="ccc"
imagestring[0][1]="aaa"
imagestring[0][2]="ddd"
imagestring[1][0]="bbb"
imagestring[1][1]="eee"

我想要第三个列表“结果”,其中包含根据距离字符串顺序的图像字符串值。 结果应该有项目:

result[0][0]="ddd"
result[0][1]="aaa"
result[0][2]="ccc"
result[1][0]="eee"
result[1][1]="bbb"

希望我说清楚了。

【问题讨论】:

    标签: list dart mapping


    【解决方案1】:

    我确信以下可以更有效地完成,但这里是我对如何完成的建议。

    请注意,distancestringimagestring 确实具有与您的示例相同的元素结构,这一点很重要。

    void main() {
      final distancestring = [
        [3.4, 2, 1.1],
        [5, 4.2]
      ];
    
      final imagestring = [
        ['ccc', 'aaa', 'ddd'],
        ['bbb', 'eee']
      ];
    
      print(distancestring); // [[3.4, 2, 1.1], [5, 4.2]]
      print(imagestring); // [[ccc, aaa, ddd], [bbb, eee]]
      print(sort(
          distancestring,
          imagestring,
          (dynamic d1, dynamic d2) =>
              d1.compareTo(d2) as int)); // [[ddd, aaa, ccc], [eee, bbb]]
    }
    
    class Pair<A, B> {
      final A a;
      final B b;
    
      const Pair(this.a, this.b);
    }
    
    List<List<B>> sort<A, B>(List<List<A>> distancestring,
        List<List<B>> imagestring, int Function(A, A) compare) {
      final temp = <Pair<A, B>>[];
    
      for (var i = 0; i < distancestring.length; i++) {
        for (var k = 0; k < distancestring[i].length; k++) {
          temp.add(Pair(distancestring[i][k], imagestring[i][k]));
        }
      }
    
      temp.sort((e1, e2) => compare(e1.a, e2.a));
    
      var count = 0;
      final result = <List<B>>[];
    
      for (var i = 0; i < distancestring.length; i++) {
        final list = <B>[];
    
        for (var k = 0; k < distancestring[i].length; k++) {
          list.add(temp[count++].b);
        }
    
        result.add(list);
      }
    
      return result;
    }
    

    【讨论】:

    • 非常感谢@julemand101!唯一的问题是我有一个动态图像字符串和距离字符串。它们是稍后设置的。所以代码给出:错误:推断类型参数'Comparable'不符合'sort'上类型变量'A'的绑定'Comparable'。有什么解决办法吗?
    • 我已经更新了我的示例,因此比较方法可以作为排序方法的参数给出,从而消除了 A 可比较的要求。但是,您需要确保比较方法适用于您的输入。 :)
    • 很高兴听到。我通过性能改进再次更新了代码。我没有从temp 列表中删除元素(并且每次都移动元素),而是使用计数器来知道接下来应该添加哪个元素。
    猜你喜欢
    • 2018-10-01
    • 2016-11-07
    • 2023-03-15
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多