Dart 串列應根據元素物件內的相同整數值按字母順序排序。如果整數具有相同的值,則相關字串應按字母順序和升序排列
這是清單。
串列項 = [ People( 10 , 'a' ) , People( 5 , 'c' ), People( 15 , 'b' ), People( 15 , 'a' ), People( 5 , 'k' ), People ( 10 , 'd' ) 人 ( 7, 'c' )];
預期結果 :
串列項 = [ People( 5 , 'c' ) , People( 5 , 'k' ), People( 7 , 'c' ), People( 10 , 'a' ), People( 10 , 'k' ), People ( 15 , 'a' ) 人 ( 15 , 'd' )];
uj5u.com熱心網友回復:
@Pskink 已經提到,首先你需要按字母順序排序,然后你用數字
void main() {
List items = [
People(10, 'd'),
People(5, 'c'),
People(15, 'b'),
People(15, 'a'),
People(5, 'k'),
People(10, 'a'),
People(7, 'c')
];
items.sort((a, b) => ("${a.title}")
.toString()
.compareTo(("${b.title}").toString()));
items.sort((a, b) => (a.number)
.compareTo((b.number)));
items.forEach((e)=>print("${e.number} ${e.title}"));
}
輸出:
5 c
5 k
7 c
10 a
10 d
15 a
15 b
uj5u.com熱心網友回復:
不需要 Jahidul Islam 建議的雙重分類。您只需要創建一個比較方法來比較名稱,以防數字相同。所以像這樣:
void main() {
final items = [
People(10, 'a'),
People(5, 'c'),
People(15, 'b'),
People(15, 'a'),
People(5, 'k'),
People(10, 'd'),
People(7, 'c'),
];
print(items);
// [People(10,'a'), People(5,'c'), People(15,'b'), People(15,'a'), People(5,'k'), People(10,'d'), People(7,'c')]
items.sort((p1, p2) {
final compareAge = p1.age.compareTo(p2.age);
if (compareAge != 0) {
return compareAge;
} else {
return p1.name.compareTo(p2.name);
}
});
print(items);
// [People(5,'c'), People(5,'k'), People(7,'c'), People(10,'a'), People(10,'d'), People(15,'a'), People(15,'b')]
}
class People {
final int age;
final String name;
People(this.age, this.name);
@override
String toString() => "People($age,'$name')";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/391670.html
