按每个字符串中的第n个元素对符号(字符串)的 dart 排序列表

jjhzyzn0  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(205)

我有一个字符串列表(List<String>):

LAT-3-45.3256435634
LNG-2-43.542352345654
LAT-1-45.32564356345
LNG-4-43.542352345654
LAT-1-45.325643563456
LNG-2-43.54235234565
LAT-3-45.325643563456
LNG-5-4.5423523456
etc etc.

我想按整数值排序(第一个数字,LAT或LNG后的第二个元素,减号之间)。
预期结果:

LAT-1-45.32564356345
LNG-1-43.54235234546654
LAT-2-45.325643563984
LNG-2-43.542352345654
LAT-3-45.32564356346756
LNG-3-4.5423523456676
LAT-4-45.325646753563456
LNG-4-4.54765623523456

我该怎么做?

tgabmvqs

tgabmvqs1#

您可以为List上的sort()方法提供一个比较方法。每次比较都调用此方法。在本例中,我们需要解析比较中的每个String,以便比较int值。
这可以通过类似下面的东西来完成。我添加了一个逻辑,如果两个int值相等,我们将基于LATLNG文本进行排序:

input.sort((a, b) {
    List<String> partsA = a.split('-');
    List<String> partsB = b.split('-');
    int valueA = int.parse(partsA[1]);
    int valueB = int.parse(partsB[1]);

    int compare = valueA.compareTo(valueB);
    return compare != 0 ? compare : partsA[0].compareTo(partsB[0]);
  });

在这个完整的测试程序中可以看到一个使用示例:

void main() {
  List<String> input = [
    'LAT-1-45.32564356345',
    'LNG-1-43.54235234546654',
    'LAT-2-45.325643563984',
    'LNG-2-43.542352345654',
    'LAT-3-45.32564356346756',
    'LNG-3-4.5423523456676',
    'LAT-4-45.325646753563456',
    'LNG-4-4.54765623523456',
  ]..shuffle(); // <-- Shuffle to simulate the list are coming in random order

  input.forEach(print);
  // LAT-1-45.32564356345
  // LAT-4-45.325646753563456
  // LNG-1-43.54235234546654
  // LAT-2-45.325643563984
  // LAT-3-45.32564356346756
  // LNG-3-4.5423523456676
  // LNG-4-4.54765623523456
  // LNG-2-43.542352345654
  print('-----------------------');

  input.sort((a, b) {
    List<String> partsA = a.split('-');
    List<String> partsB = b.split('-');
    int valueA = int.parse(partsA[1]);
    int valueB = int.parse(partsB[1]);

    int compare = valueA.compareTo(valueB);
    return compare != 0 ? compare : partsA[0].compareTo(partsB[0]);
  });
  
  input.forEach(print);
  // LAT-1-45.32564356345
  // LNG-1-43.54235234546654
  // LAT-2-45.325643563984
  // LNG-2-43.542352345654
  // LAT-3-45.32564356346756
  // LNG-3-4.5423523456676
  // LAT-4-45.325646753563456
  // LNG-4-4.54765623523456
}

相关问题