Version sorting

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		var list = new List<string>{"2.1-hello","2.2-world","2.3-people","2.10-everywhere", "foo"};
		list = list
			.Select(s => (String:s,Version:GetVersion(s), LastPart:GetLastPart(s)))
			.OrderBy(x => x.Version)
			.ThenBy(x => x.LastPart)
			.Select(x => x.String)
			.ToList();
		Console.WriteLine(string.Join(Environment.NewLine, list));
	}
	
	private static Version GetVersion(string s, string delimiter = "-")
	{
		int index = s.IndexOf(delimiter);
		if(index == -1) return null;
		return Version.TryParse(s.Remove(index), out Version v) ? v : null;
	}

	private static string GetLastPart(string s, string delimiter = "-")
	{
		int index = s.IndexOf(delimiter);
		if (index == -1) return s;
		return s.Substring(index + delimiter.Length);
	}
}
;