CSharp · Console
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);
}
}