我有一個名爲ID的多選下拉菜單,它提交ID = 1,2,3,我需要將其解析爲一個整數數組,以在篩選方法中執行Contains() 。目前我使用:從「1,2,3」解析int []
string[] ids = Request["ID"].Split(',');
我不太喜歡,因爲它比字符串比較字符串比較慢。有什麼建議麼?
我有一個名爲ID的多選下拉菜單,它提交ID = 1,2,3,我需要將其解析爲一個整數數組,以在篩選方法中執行Contains() 。目前我使用:從「1,2,3」解析int []
string[] ids = Request["ID"].Split(',');
我不太喜歡,因爲它比字符串比較字符串比較慢。有什麼建議麼?
Request["ID"].Split(',').Select(x=>int.Parse(x)).ToArray();
當然,如果任何結果數字字符串不是「可解析的」(這樣的詞是否存在?),這將拋出。
這取決於如果轉換爲整數更快或字符串比較更快,您將在數組中查找多少次。
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(','));
第一:
string[] arr = Request["ID"].Split(',')
然後:
Array.ConvertAll(arr, s => Int32.Parse(s));
Array.ConvertAll(arr, Int32.Parse);
arr.Select(s => Int32.Parse(s));
arr.Select(Int32.Parse);
然後:
new HashSet<int>(result);
(最快速的容器進行Contains()
)
參見:
int[] ids = Request["ID"].Split(',').Select(Convert.ToInt32).ToArray();
或'.Select(Convert.ToInt32)' – Random832 2011-05-26 14:34:17
@Random:+1 Yup,這更簡潔。我會改變答案來反映它。 – 2011-05-26 14:46:55
如果你沒有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]);
}
對於信息,最後4行只是:'int [] items = Array.ConvertAll(ids,int.Parse);' – 2011-05-26 12:30:12
非常好,繼續進行sigma掃描! (巴斯光年)。 – Valentin 2011-05-26 12:31:33
你可以簡化,順便說一句; Split(',')。Select(int.Parse).ToArray();',或者甚至Array.ConvertAll(Request [「ID」]。Split(','),int .Parse)' – 2011-05-26 12:26:34