2011-05-26 57 views
10

我有一個名爲ID的多選下拉菜單,它提交ID = 1,2,3,我需要將其解析爲一個整數數組,以在篩選方法中執行Contains() 。目前我使用:從「1,2,3」解析int []

string[] ids = Request["ID"].Split(','); 

我不太喜歡,因爲它比字符串比較字符串比較慢。有什麼建議麼?

回答

13
Request["ID"].Split(',').Select(x=>int.Parse(x)).ToArray(); 

當然,如果任何結果數字字符串不是「可解析的」(這樣的詞是否存在?),這將拋出。

+10

你可以簡化,順便說一句; Split(',')。Select(int.Parse).ToArray();',或者甚至Array.ConvertAll(Request [「ID」]。Split(','),int .Parse)' – 2011-05-26 12:26:34

2

這取決於如果轉換爲整數更快或字符串比較更快,您將在數組中查找多少次。

HashSet<int> ids = new HashSet<int>(from s in Request["ID"].Split(',') 
            select int.Parse(s)); 

但可能是最快的,如果你有很多編號:s將創建一個HashSet<string>

HashSet<string> = new HashSet<string>(string[] ids = Request["ID"].Split(',')); 
2
int[] ids = Request["ID"].Split(',').Select(Convert.ToInt32).ToArray(); 
+1

或'.Select(Convert.ToInt32)' – Random832 2011-05-26 14:34:17

+0

@Random:+1 Yup,這更簡潔。我會改變答案來反映它。 – 2011-05-26 14:46:55

0

如果你沒有LINQ ,你可以:

string[] ids = Request["ID"].Split(','); 
int[] items = new int[ids.Length]; 
for(int i = 0; i<ids.Length; i++) 
{ 
    items[i] = int.Parse(ids[i]); 
} 
+3

對於信息,最後4行只是:'int [] items = Array.ConvertAll(ids,int.Parse);' – 2011-05-26 12:30:12

+0

非常好,繼續進行sigma掃描! (巴斯光年)。 – Valentin 2011-05-26 12:31:33