【发布时间】:2011-05-26 12:21:03
【问题描述】:
我有一个名为 ID 的多选下拉列表,它提交 ID=1,2,3,我需要将其解析为一个整数数组,以便在过滤方法中执行 Contains()。目前我使用:
string[] ids = Request["ID"].Split(',');
我不太喜欢,因为它比较字符串比比较 int 慢。有什么建议吗?
【问题讨论】:
我有一个名为 ID 的多选下拉列表,它提交 ID=1,2,3,我需要将其解析为一个整数数组,以便在过滤方法中执行 Contains()。目前我使用:
string[] ids = Request["ID"].Split(',');
我不太喜欢,因为它比较字符串比比较 int 慢。有什么建议吗?
【问题讨论】:
Request["ID"].Split(',').Select(x=>int.Parse(x)).ToArray();
当然,如果任何生成的数字字符串不是“可解析的”(是否存在这样的单词?),这将抛出。
【讨论】:
Request["ID"].Split(',').Select(int.Parse).ToArray();,甚至是Array.ConvertAll(Request["ID"].Split(','), int.Parse)
如果转换为整数更快或字符串比较更快,这取决于您将在数组中查找多少次。
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(','));
【讨论】:
int[] ids = Request["ID"].Split(',').Select(Convert.ToInt32).ToArray();
【讨论】:
.Select(Convert.ToInt32)
第一:
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())
另见:
【讨论】:
如果你没有 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]);
}
【讨论】:
int[] items = Array.ConvertAll(ids, int.Parse);