gpt4 book ai didi

c# - 使用嵌套 Where (LINQ) 子句优化数组迭代

转载 作者:行者123 更新时间:2023-11-30 16:56:49 24 4
gpt4 key购买 nike

我正在创建一个具有搜索功能的 (C#) 工具。搜索有点类似于“去任何地方”搜索(如 ReSharper 或 VS2013)。

搜索上下文是一个字符串数组,包含前面的所有项目:

private string[] context; // contains thousands of elements

搜索是增量式的,并且在用户提供每个新输入(字符)时发生。

我已经使用 LINQ Where 扩展方法实现了搜索:

// User searched for "c"
var input = "c";
var results = context.Where(s => s.Contains(input));

当用户搜索“ca”时,我尝试使用之前的结果作为搜索上下文,但这会导致(我认为?)嵌套的 Where 迭代,并且运行不佳。想像这样的代码:

// Cache these results.
var results = var results = context.Where(s => s.Contains(input));

// Next search uses the previous search results
var newResults = results.Where(s => s.Contains(input));

有没有办法优化这个场景?

在每次搜索时将 IEnumerable 转换为数组会导致高内存分配和运行不佳。

最佳答案

向用户展示成千上万的搜索结果是毫无用处的。在将结果呈现给用户之前,您应该在查询中添加“top”(Take in linq)语句。

var results = context.Where(s => s.Contains(input)).Take(100);

如果您想向用户展示接下来的 100 个结果:

var results = context.Where(s => s.Contains(input)).Skip(100).Take(100);

所有搜索也只使用原始数组,没有嵌套 Where 因为它没有任何好处,除非您具体化查询。

关于c# - 使用嵌套 Where (LINQ) 子句优化数组迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com