我有这个
var nlist = [4,2,1,5];
var compare = (a, b) => a.compareTo(b);
nlist.sort(compare);
print(nlist); // [1,2,4,5]
和此处(我将(b, a)
更改为(a, b)
)
var nlist = [4,2,1,5]
var compare = (b, a) => a.compareTo(b);
nlist.sort(compare);
print(nlist); // [5,4,2,1]
为什么这个小修改会从升序变为降序?
答案 0 :(得分:7)
在改变之后你真正期望发生的事情会很有趣。
比较返回+1
,0
,-1
,具体取决于第二个参数是否大于第一个参数或0
是否相等。交换时,+1
变为-1
,反之亦然,这会导致降序而不是升序。
1.compareTo(2)
返回-1
和
print(nlist.sort((a, b) => a.compareTo(b)));
按升序打印列表元素,所以是的,升序是默认值。
答案 1 :(得分:7)
v-if=(users.Alarm)
<v-card class="mx-4 grey darken-4" v-for="user in users" :key="user.id">
<v-footer flat height="35px" color="black">
<v-btn class="green--text mx-1" x-small v-if="safety">Safety</v-btn>
<v-btn class="red--text mx-1" x-small v-if="alarm">Alarm</v-btn>
<v-btn class="yellow--text mx-1" x-small v-if="battery">Battery</v-btn>
</v-footer>
<v-divider></v-divider>
</v-card>
export default {
components: { },
data() {
return {
safety: false,
battery: false,
alarm: false,
users: [],
};
},
created() {
if (users.Safety) {
this.check = true;
}},
// here goes the other buttons once I get one working
var user = firebase.auth().currentUser;
var SuperUser = user.uid + "3329"
db.collection(SuperUser)
.get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
const data = {
id: doc.id,
Safety: doc.data().Safety,
Alarm: doc.data().Alarm,
Battery: doc.data().Battery,
};
this.users.push(data);
});
})
}
};
答案 2 :(得分:2)
升序:
var nlist = [4,2,1,5]
var compare = (b, a) => a.compareTo(b);
降序:
var compare = (b, a) => -a.compareTo(b);
答案 3 :(得分:1)
另一种排序方式
var nlist = [4,2,1,5];
var ascending = nlist..sort();
var descending = ascending.reversed;
print(ascending); // [1, 2, 4, 5]
print(descending); // [5, 4, 2, 1]
答案 4 :(得分:0)
使用静态扩展方法对序列进行排序
import 'package:enumerable/enumerable.dart';
void main() {
final nlist = [4, 2, 1, 5];
final query1 = nlist.orderBy((e) => e);
print(query1.toList());
final query2 = nlist.orderByDescending((e) => e);
print(query2.toList());
}
答案 5 :(得分:0)
不需要写list.sort((a, b) => a.compareTo(b));
。这有效:
list.sort();
list.sort((a, b) => b.compareTo(a));
或者,从 2021 年开始,如果您使用 https://pub.dev/packages/fast_immutable_collections(FIC 包),这将起作用:
list.sortReversed();
(list..sort()).reversed
不会原地反转列表。相反,它按升序对原始列表进行排序,然后返回降序的 iterable,而不是列表(即,Iterable<int>
,而不是 List<int>
)。也许这就是你想要的。如果没有,您必须执行list = (list..sort()).reversed.toList();
。但是,对于大型列表,list.sortReversed()
要快得多。
在前面提到的 FIC 包中还有一个 reversedView()
方法,它返回列表的降序 VIEW。 “视图”意味着如果您稍后将项目添加到原始列表中,反向列表也将拥有这些项目,反之亦然。因此,如果您的列表已经按升序排序,并且您想访问降序列表而不浪费时间进行反转,只需执行以下操作:
list.sort();
List<int> listDescending = list.reversedView; // Very fast.
免责声明:我是 FIC 包的作者。