我正在创建服务,以便用户轻松地从IANA协议注册表中选择协议.
正如您可能想象的那样,在注册表中搜索该术语会http
引发大量的点击.由于amt-soap-http
用户选择的频率远远低于直接选择http
,因此我决定将所有开头的内容拉出来http
,然后将其与剩余的结果连接起来.
下面的lambda表达式是思考过程的结果:
var records = this._ianaRegistryService.GetAllLike(term).ToList();
var results = records.Where(r => r.Name.StartsWith(term))
.OrderBy(r => r.Name)
.Concat(records.Where(r => !r.Name.StartsWith(term))
.OrderBy(r => r.Name))
.Take(MaxResultSize);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我觉得我在结果中迭代的时间超过了必要的次数.除了过早的优化考虑因素有一个lambda表达式的组合,它会比上面的更有效吗?
作为两步排序可能更有效:
var results = records.OrderBy(r => r.Name.StartsWith(term) ? 1 : 2)
.ThenBy(r => r.Name)
.Take(MaxResultSize);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1093 次 |
最近记录: |