11,573 questions
split by ".", then by "-" then compare
items.Sort((a,b) =>
{
Func<int[], int[], int> CompareArrays = (a1, a2) =>
{
for (var i = 0; i < a1.Length; ++i)
{
if (i >= a2.Length || a1[i] > a2[i])
return 1;
if (a1[i] < a2[i])
return -1;
}
return a2.Length > a1.Length ? -1 : 0;
};
Func<string, int[]> LevelToArray = (s) => s.Split('.')
.SelectMany(e => e.Split('-'))
.Select(e => int.Parse(e)).ToArray();
return CompareArrays(LevelToArray(a.level), LevelToArray(b.level));
});