2011-09-22 44 views
1

我希望讓用戶通過以下方式輸入整數:解析包含整數字符串轉換成列表<int>

  • 號碼之間用逗號分隔:1,3,122,64000,27等

  • 數字範圍:37-2000

  • 以上的混合物:55,2,1-10000,65000-65007,2182

我怎樣才能解析一個字符串,可能在上面的任何一種形式結束了一個int列表?

因此,例如:1-5,6,7-8應該給一個列表包含整數1,2,3,4,5,6,7,8

我很新的C#所以一些示例代碼將不勝感激。謝謝。

+2

你想什麼的結果來自像「1-10000」的範圍列表?是否應該在列表中添加10000個數字? – Guffa

+0

@Guffa:是的,1-10000會將所有從1到10K的數字添加到列表中。例如,1-5將把int 1,2,3,4,5加到列表中。 – stanleyR

回答

2

這工作:

var query = 
    from x in text.Split(',') 
    let y = x.Split('-') 
    let b = int.Parse(y[0].Trim()) 
    let e = int.Parse(y[y.Length - 1].Trim()) 
    from n in Enumerable.Range(b, e - b + 1) 
    select n; 

var result = query.ToList(); 

我建議加入一些錯誤處理,但如果你輸入了正確的格式這個作品。


**編輯**:.NET 2.0版本。

​​

許多相同的... :-)

+0

謝謝。問題是,我們必須使用.NET 2.0來做到這一點。 – stanleyR

+0

@stanleyR - 我添加了.NET 2.0版本到我的答案。 – Enigmativity

+0

謝謝! x中可能沒有' - ';它可能只是一個整數值。例如,文本可能是1-2,5,222,5-9。這是否處理?再次感謝! – stanleyR

2

String.split分裂逗號,會給你所有你需要的,然後如果一個組包含 - 再拆分它,你有兩個範圍值

0

Tokenise基礎上,字符串「」然後解析單個數字或範圍的列表。

從內存中可以看到List上的Split(..)方法,您可以使用它來獲取令牌。然後,只需測試一個' - '的存在(如果它的第一個字符是負數,那麼顯然不是一個範圍)。