簡體   English   中英

將字符串解析為帶范圍的整數列表

[英]Parsing String Into List of Integers with Ranges

我有一堆字符串想要解析,它們看起來像這樣:

"1001, 1003, 1005-1010"
"1015"
"900-903"
"200, 202-209, 211-220"

有時這些字符串只是一個整數,有時多個之間用逗號隔開,有時是一個范圍,而后兩個可以同時以任意順序出現在單個字符串中。

我想做的是創建一個函數,該函數接收字符串並通過解析字符串返回整數集合。 因此,例如,第一個字符串應返回:

[1001, 1003, 1005, 1006, 1007, 1008, 1009, 1010]

在.NET 4.0中,有哪些聰明的方法可以做到這一點?

.NET 4.0意味着您可以使用LINQ,因此您應該使用它:

var input = "1001, 1003, 1005-1010";

var results = (from x in input.Split(',')
               let y = x.Split('-')
               select y.Length == 1
                 ? new[] { int.Parse(y[0]) }
                 : Enumerable.Range(int.Parse(y[0]), int.Parse(y[1]) - int.Parse(y[0]) + 1)
               ).SelectMany(x => x).ToList();

傳統循環可能更容易閱讀:

string input = "1001, 1003, 1005-1010";

List<int> result = new List<int>();
foreach (string part in input.Split(','))
{
    int i = part.IndexOf('-');
    if (i == -1)
    {
        result.Add(int.Parse(part));
    }
    else
    {
        int min = int.Parse(part.Substring(0, i));
        int max = int.Parse(part.Substring(i + 1));
        result.AddRange(Enumerable.Range(min, max - min + 1));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM