可迭代扩展不区分大小写排序
Iterable extension case insensitive sorting
我从 复制过来所以答案使用了排序扩展。
extension IterableX<E> on Iterable<E> {
Iterable<E> sortedBy(Comparable key(E e)) =>
toList()..sort((a, b) => key(a).compareTo(key(b)));
}
我正在使用它按字母顺序排序,但我想让它不区分大小写,但我做不到。
extension IterableX<E> on Iterable<E> {
Iterable<E> caseInsensitiveSortedBy(Comparable key(E e)) => toList()
..sort((a, b) => key(a?.toUpperCase())
.compareTo(key(b?.toUpperCase())));
}
不允许,因为 The method 'toUpperCase' isn't defined for the type '<unknown>'.
所以我在努力
Iterable<E> caseInsensitiveSortedBy(Comparable key(E e)) => toList()
..sort((a, b) =>
key(a is String? ? a.toUpperCase() : a).compareTo(key(b is String? ? b.toUpperCase() : b)));
然后我得到 The argument type 'Object?' can't be assigned to the parameter type 'E'.
你的扩展应该只应用于Iterable<String>
,而不是任何可迭代的:
extension IterableX on Iterable<String> {
Iterable<String> caseInsensitiveSortedBy() => toList()
..sort((a, b) => a.toUpperCase()
.compareTo(b.toUpperCase()));
}
您不能对任何类型调用 toUpperCase
。
我从
extension IterableX<E> on Iterable<E> {
Iterable<E> sortedBy(Comparable key(E e)) =>
toList()..sort((a, b) => key(a).compareTo(key(b)));
}
我正在使用它按字母顺序排序,但我想让它不区分大小写,但我做不到。
extension IterableX<E> on Iterable<E> {
Iterable<E> caseInsensitiveSortedBy(Comparable key(E e)) => toList()
..sort((a, b) => key(a?.toUpperCase())
.compareTo(key(b?.toUpperCase())));
}
不允许,因为 The method 'toUpperCase' isn't defined for the type '<unknown>'.
所以我在努力
Iterable<E> caseInsensitiveSortedBy(Comparable key(E e)) => toList()
..sort((a, b) =>
key(a is String? ? a.toUpperCase() : a).compareTo(key(b is String? ? b.toUpperCase() : b)));
然后我得到 The argument type 'Object?' can't be assigned to the parameter type 'E'.
你的扩展应该只应用于Iterable<String>
,而不是任何可迭代的:
extension IterableX on Iterable<String> {
Iterable<String> caseInsensitiveSortedBy() => toList()
..sort((a, b) => a.toUpperCase()
.compareTo(b.toUpperCase()));
}
您不能对任何类型调用 toUpperCase
。