作为字符串的 OrderBy 数字(无法转换为 int)

Iba*_*wns 7 .net c# linq string list

我正在尝试对List<string>包含每个数字后跟字母的元素列表的a 进行排序。这就是为什么每个元素不能简单地转换为 int 的原因。该列表在运行时生成,但例如,该列表可能包含以下元素:

10 dog, 53 cow, 2 crow, 29 horse, 12 rabbit, 107 frog, 35 cat, 7 dragon
Run Code Online (Sandbox Code Playgroud)

我试过这样排序:

public void Compare()
{   
   sortedList = sortedList.OrderBy(g => g).ToList(); 
}
Run Code Online (Sandbox Code Playgroud)

结果:

10 dog, 107 frog, 12 rabbit, 2 crow, 29 horse, 35 cat, 53 cow, 7 dragon
Run Code Online (Sandbox Code Playgroud)

很明显,它是按字母顺序排序的,因为在这个例子中,107 排在 12 之前,而 107 中的“10”小于 12。但我需要以某种方式对它进行排序,使其按照单词前面的数字顺序返回。

我需要这个例子来返回:

2 crow, 7 dragon, 10 dog, 12 rabbit, 29 horse, 35 cat, 53 cow, 107 frog
Run Code Online (Sandbox Code Playgroud)

我对编码很陌生,这让我完全难住了。关于如何达到我想要的结果的任何建议?

Ham*_*jam 3

您可以提取所需的数据,然后按以下顺序进行排序

var sorted = list
    .Select(x => new
    {
        Splited = x.Split(),
        Raw = x
    }) //split the string and keep the raw value
    .Select(x => new
    {
        Count = int.Parse(x.Splited[0]), // extract the number 
        Raw = x.Raw
    })
    .OrderBy(x => x.Count) //order by that number
    .Select(x => x.Raw); //select raw value
Run Code Online (Sandbox Code Playgroud)