Я фактически реализовал его как метод расширения на StringComparer
, чтобы вы могли сделать, например:
StringComparer.CurrentCulture.WithNaturalSort()
или StringComparer.OrdinalIgnoreCase.WithNaturalSort()
. Результирующий IComparer
можно использовать во всех местах, таких как OrderBy
, OrderByDescending
, ThenBy
, ThenByDescending
, SortedSet
и т. д. И вы все еще можете легко настраивать чувствительность к регистру, культуру и т. д.
Реализация довольно тривиальна и должна выполняться достаточно хорошо даже в больших последовательностях.
Я также опубликовал ее как tiny пакет NuGet , поэтому вы можете просто сделать:
Install-Package NaturalSort.Extension
Код, содержащий комментарии к документации XML и набор тестов тестов , доступен в репозиторий NaturalSort.Extension GitHub Весь код это (если вы еще не можете использовать C # 7, просто установите пакет NuGet): public static class StringComparerNaturalSortExtension
{
public static IComparer
Я заметил, что вам не нужно переносить MatTableDataSource<>
для ответа API,
async ngOnInit() {
// Load the items from the blockchain
this.items = await this.api.getApiRecords(); //this will be work
//this.items = new MatTableDataSource<ApiRecord>(items); << remove this
}
В этом примере stackblitz переменная dataSource содержит необработанные данные. Не нужно типа для MatTableDataSource<>
Обновление:
Здесь работает пример Stabblitz .
Ниже также обновляется код,
<mat-header-row *matHeaderRowDef="['type', 'provider', 'url', 'country', 'updated_on']"></mat-header-row>
<mat-row *matRowDef="let row; columns: ['type', 'provider', 'url', 'country', 'updated_on']">
</mat-row>