Я уверен, что следующее может быть сделано более эффективно, но вот мое предложение о том, как это можно сделать.
Обратите внимание, что важно, чтобы distancestring
и imagestring
имели одинаковую структуру элементов, как ваш пример.
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;
}