我有一个名为ID的多选下拉列表,提交ID = 1,2,3,我需要将其解析为整数数组,以便在过滤器方法中执行Contains()。目前我使用:
string[] ids = Request["ID"].Split(',');
我真的不喜欢,因为比较字符串比较慢。有什么建议吗?
答案 0 :(得分:13)
Request["ID"].Split(',').Select(x=>int.Parse(x)).ToArray();
当然,如果任何结果数字字符串不是“可解析的”(这样的单词是否存在?),这将抛出。
答案 1 :(得分:2)
这取决于如果转换为int更快或字符串比较更快,您将在数组中查找的次数。
HashSet<int> ids = new HashSet<int>(from s in Request["ID"].Split(',')
select int.Parse(s));
但如果你有很多id:s可能是最快的,那就是创建一个HashSet<string>
:
HashSet<string> = new HashSet<string>(string[] ids = Request["ID"].Split(','));
答案 2 :(得分:2)
int[] ids = Request["ID"].Split(',').Select(Convert.ToInt32).ToArray();
答案 3 :(得分:1)
首先:
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()
的最快容器)
另见:
答案 4 :(得分: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]);
}