{"id":25254223,"url":"https://github.com/gihansoft/naturalstringcomparer","last_synced_at":"2025-10-27T01:31:01.673Z","repository":{"id":64967774,"uuid":"136447903","full_name":"GihanSoft/NaturalStringComparer","owner":"GihanSoft","description":"LINQ like method and Comparer\u003cstring\u003e that can be used to sort strings by number in them (like what windows explorer do {\"text1\", \"text2\", \"text10\"} instead of {\"text1\", \"text10\", \"text2\"}). pure C# with .NET Standard.","archived":false,"fork":false,"pushed_at":"2024-11-08T13:20:12.000Z","size":123,"stargazers_count":12,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-10T05:47:17.400Z","etag":null,"topics":["c-sharp","comparer","comparison","sort","sort-strings","string"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GihanSoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-07T08:39:01.000Z","updated_at":"2024-11-08T13:20:16.000Z","dependencies_parsed_at":"2024-06-20T22:09:09.596Z","dependency_job_id":null,"html_url":"https://github.com/GihanSoft/NaturalStringComparer","commit_stats":{"total_commits":69,"total_committers":3,"mean_commits":23.0,"dds":0.5652173913043479,"last_synced_commit":"0e2306f2f592cbd84566e0159c879ef6975eba71"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GihanSoft%2FNaturalStringComparer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GihanSoft%2FNaturalStringComparer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GihanSoft%2FNaturalStringComparer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GihanSoft%2FNaturalStringComparer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GihanSoft","download_url":"https://codeload.github.com/GihanSoft/NaturalStringComparer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238418258,"owners_count":19468871,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","comparer","comparison","sort","sort-strings","string"],"created_at":"2025-02-12T05:31:21.470Z","updated_at":"2025-10-27T01:30:56.366Z","avatar_url":"https://github.com/GihanSoft.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NaturalStringComparer\n[![Build status](https://ci.appveyor.com/api/projects/status/acwd0d2hwng5l5yh?svg=true)](https://ci.appveyor.com/project/chiefmb/naturalstringcomparer)\n\n## install\n```sh\ndotnet add package GihanSoft.String.NaturalComparer --version 3.5.0\n```\nor\n```pwsh\nInstall-Package GihanSoft.String.NaturalComparer -Version 3.5.0\n```\nor\n```xml\n\u003c!-- add this to .csproj --\u003e\n\u003cItemGroup\u003e\n    \u003cPackageReference Include=\"GihanSoft.String.NaturalComparer\" Version=\"3.5.0\" /\u003e\n\u003c/ItemGroup\u003e\n```\n\n`LINQ` like extension methods and `Comparer\u003cstring\u003e` that \ncan be used to sort strings by number in them.\n\nas what windows explorer do {\"text1\", \"text2\", \"text10\"} instead of {\"text1\", \"text10\", \"text2\"}). \n\n### Features\n* **Pure C#**\n* **Fast** (because of internal usage of `Span`).\n* .NET Standard 1.0\n* Cross-Platform\n* Optional use of `StringComparison` `enum` as base.\n\n### Usage\n\n```C#\nvar stringList = new List\u003cstring\u003e\n{\n    \"number1\", \"number2\", \"number3\", \"number4\", \"number10\", \"number15\", \"number22\", \"number26\"\n    , \"number9\", \"number33\", \"number5\", \"number12\"\n};\n\nstringList.Sort(new NaturalComparer(StringComparison.Ordinal));\n//or\nstringList.NaturalSort();\n\nConsole.WriteLine(\"Natural Sort:\");\nforeach(var item in stringList)\n{\n  Console.WriteLine(item);\n}\n\nstringList.Sort();\nConsole.WriteLine();\nConsole.WriteLine(\"Normal Sort:\");\nforeach(var item in stringList)\n{\n  Console.WriteLine(item);\n}\n\n/* output\nNatural Sort:\nnumber1\nnumber2\nnumber3\nnumber4\nnumber5\nnumber9\nnumber10\nnumber12\nnumber15\nnumber22\nnumber26\nnumber33\n\nNormal Sort:\nnumber1\nnumber10\nnumber12\nnumber15\nnumber2\nnumber22\nnumber26\nnumber3\nnumber33\nnumber4\nnumber5\nnumber9\n*/\n```\n\n#### types\n\n```C#\npublic class NaturalComparer : IComparer\u003cstring?\u003e \n{\n}\n```\n\n#### extension methods\n\n```C#\n// List\u003cT\u003e extension\npublic static void NaturalSort\u003cTSource\u003e(\n            this List\u003cTSource\u003e src,\n            Func\u003cTSource, string?\u003e? keySelector = null,\n            StringComparison stringComparison = StringComparison.Ordinal);\n\n// T[] extension\npublic static void NaturalSort\u003cTSource\u003e(\n            this TSource[] src,\n            Func\u003cTSource, string?\u003e? keySelector = null,\n            StringComparison stringComparison = StringComparison.Ordinal);\n\n// IEnumerable\u003cT\u003e extensions\npublic static IOrderedEnumerable\u003cTSource\u003e NaturalOrderBy\u003cTSource\u003e(\n            this IEnumerable\u003cTSource\u003e source,\n            Func\u003cTSource, string?\u003e? keySelector = null,\n            StringComparison stringComparison = StringComparison.Ordinal);\n\npublic static IOrderedEnumerable\u003cTSource\u003e NaturalOrderByDescending\u003cTSource\u003e(\n            this IEnumerable\u003cTSource\u003e source,\n            Func\u003cTSource, string?\u003e? keySelector = null,\n            StringComparison stringComparison = StringComparison.Ordinal);\n            \npublic static IOrderedEnumerable\u003cTSource\u003e NaturalThenBy\u003cTSource\u003e(\n            this IOrderedEnumerable\u003cTSource\u003e source,\n            Func\u003cTSource, string?\u003e? keySelector = null,\n            StringComparison stringComparison = StringComparison.Ordinal);\n            \npublic static IOrderedEnumerable\u003cTSource\u003e NaturalThenByDescending\u003cTSource\u003e(\n            this IOrderedEnumerable\u003cTSource\u003e source,\n            Func\u003cTSource, string?\u003e? keySelector = null,\n            StringComparison stringComparison = StringComparison.Ordinal)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgihansoft%2Fnaturalstringcomparer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgihansoft%2Fnaturalstringcomparer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgihansoft%2Fnaturalstringcomparer/lists"}