当数字是字符串的一部分时,如何按从低到高的数字对List <string>进行排序?</string>

时间:2014-08-06 03:34:48

标签: c# .net winforms

我有一个List,在这种情况下,例如第一个索引是:

"07:53 אזעקה באשדוד, ביתר עילית, גן יבנה, מעלה אדומים, קריית מלאכי ובמ״א באר"

这是一个标题,它是一个字符串,但我认为它是一个标题。 索引是:“1。你好” 索引2是:“5. hello world”

依此类推,例如索引7是:“66。hi all”

问题是在索引7中我有“66。 并在索引2“5。 在索引9中,我有“3。

带有点之后的数字是字符串的一部分,但我仍然想根据字符串中的数字对List进行排序。

这是我每次创建List

的方式
public List<string> GetResponsers(string contents)
{
    string responser = "";
    List<string> threadList = new List<string>();
    int f = 0;
    int startPos = 0;
    while (true)
    {
        string firstTag = "<FONT CLASS='text16b'>";
        string lastTag = "&n";
        f = contents.IndexOf(firstTag, startPos);
        if (f == -1)
        {
            break;
        }
        int g = contents.IndexOf(lastTag, f);
        startPos = g + lastTag.Length;
        responser = contents.Substring(f + 22, g - f - 22);
        threadList.Add(responser);
    }
    SortList(threadList);
    return threadList;
}

这就是我的排序方式:

public List<string> SortList(List<string> thread)
{
    thread = thread
        .OrderBy(str =>
         {
             var match = Regex.Match(str, @"^([-+]?\d+)");
             return match.Success ? int.Parse(match.Groups[1].Value) : int.MaxValue;
         })
         .ToList();
    responsers.Add(new List<string>(thread));
    return thread;
}

问题是例如在List中作为标题的第一个索引(索引0)是这样的:

这是索引0:07:53אזעקהבאשדוד,ביתרעילית,גןיבנה,מעלהאדומים,קרייתמלאכיובמ"אבאר 这个不应该按数字排序,但因为它最后有一个数字:07:53它将对它进行排序并将其放入索引号7 因为它有07

或者,如果我在索引0中有另一个列表,则有:07:48אזעקהבמ"אמרחבים 所以再次因为它将把这个指数0放在指数7

但我需要在任何情况下,索引0将在最后一个索引

SortList方法正在运行,但在像07:48这样的情况下,它会将它放在索引07中,而不仅仅是在最后一个索引中。 07:48不应该是另一个数字1的一部分.2。3. 4. 5. 6。

字符串中的数字始终如下:“1。 号,点,空间

“2。 “55.

但07:43不是一个应与其他人分类的数字。

2 个答案:

答案 0 :(得分:0)

创建一个新类,用于存储当前正在创建列表的字符串和要排序的数值。然后将排序方法更改为仅使用新类中的数字字段。

答案 1 :(得分:0)

是否足以检查索引编号后的点(.)?

public List<string> SortList(List<string> thread)
{
    thread = thread
        .OrderBy(str =>
        {
            var match = Regex.Match(str, @"^([-+]?\d+)\.");
            return match.Success ? int.Parse(match.Groups[1].Value) : int.MaxValue;
        })
        .ToList();
    responsers.Add(thread); // was: responsers.Add(new List<string>(thread));
    return thread;
}