对多个列表的子列表进行排序以创建新的列表,Dart。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对多个列表的子列表进行排序以创建新的列表,Dart。相关的知识,希望对你有一定的参考价值。

我试图根据一个属性对整个列表进行排序,然后我想根据第二个属性对这个列表进行排序,但是是4个一组。所以,在对列表进行一次排序后,我想查看前4个位置,并根据第二个属性只对这4个位置进行排序--然后继续查看下一个4个位置,再对这些位置进行排序,以此类推......。

这就是我目前所做的。

class myElements {
  int Position;
  String text;
  int Top;
  int Left;


  myElements(int Position, String text, int Top, int Left){
    this.Position = Position;
    this.text = text;
    this.Top = Top;
    this.Left = Left;
  }
}
var FirstList = new List<myElements>();
var newList = new List<myElements>();

在第一个列表中添加元素

myElements Test = myElements(ElementNumber, text, Top, Left);
              FirstList.add(Test);

然后根据 "顶部 "进行第一次排序。

 Comparator<myElements> TextComparator = (a, b) => a.Top.compareTo(b.Top);
      FirstList.sort(TextComparator);

我的问题是: 我试图再次对列表进行排序,但只按4组排序--这次是按 "左 "排序。

   for (int i = 0; i < FirstList.length; i += 4) {
          Comparator<myElements> TextComparator2 = (a, b) =>
              a.Left.compareTo(b.Left);


          newList.addAll(FirstList.sublist(i, i + 3).sort(TextComparator2)); //this line does not work
        }

我想我在访问我的排序子列表时卡住了。(FirstList.sublist(i, i + 4).sort(TextComparator2) . 如果我可以将这些内容添加到一个新的列表中,应该就可以了。然而,任何其他建议都非常欢迎。

非常感谢

答案
newList.addAll(FirstList.sublist(i, i + 3).sort(TextComparator2)); //this line does not work

你的代码几乎是正确的。 你的想法是正确的,但你最终试图在一行代码中做得太多。

把它分解一下,你的代码相当于:

var sublist = FirstList.sublist(i, i + 3);
newList.addAll(sublist.sort(...)); // Does not work

而这是行不通的,因为 List.sort 不返回一个值。 它 变种 而不是返回一个新的列表。

如果换成你来做就可以了。

var sublist = FirstList.sublist(i, i + 3);
sublist.sort();
newList.addAll(sublist);

还有: List.sublist 用一个 独占 end index。 如果你想创建4个元素的子列表,你需要使用 sublist(i, i + 4).

以上是关于对多个列表的子列表进行排序以创建新的列表,Dart。的主要内容,如果未能解决你的问题,请参考以下文章

Dart对列表进行排序

如何在 Dart 中对列表进行排序? [复制]

如何在 Dart 中按“枚举”对列表进行排序?

如何在 Dart 中对字符串列表进行排序?

如何根据 Dart 中的 int 属性对所有 Class 属性进行排序?

C#根据多个(26 + 3)类别以特定顺序对对象列表进行排序(LINQ,if else,switch case)[关闭]