如果匹配特定的搜索词,则替换数组中的值-O(n ^ 2)

时间:2019-03-08 17:13:12

标签: c#

我的问题本质上是,我有一个ArtistNames数组,这些是我将发送到API的搜索字词,这些名称是从网页上抓取的,但是返回的名称有时与api。

我的解决方法是创建一个“ EdgeCase”对象,其中包含FestivalID,SearchTerm(Api搜索词)和要进行比较的字符串。

我的代码本质上是遍历美术师,在其中循环遍历边缘案例,以查看artistName是否包含在边缘案例中。一旦找到阵列,我就将其从阵列中移除,但仍然无法提高效率。

       List<EdgeCases> edgeCases = _currentActiveData.EdgeCases.Where(x => x.FestivalID == festivalID).ToList();
        //Todo Improve performance
        for (int i = 0; i < artistNames.Length; i++)
        {
            for (var j = 0; i < edgeCases.Count; j++)
            {
                EdgeCases edgeCase = edgeCases[j];
                if (artistNames[i].Trim().Contains(edgeCase.ComparableString))
                {
                    artistNames[i] = edgeCase.SearchTerm;
                    edgeCases.Remove(edgeCases[j]);
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

解决了评论,只是形式化了:使用Dictionary

列表的整个问题在于,您必须遍历它们才能找到所需的内容,而使用Dictionary可以在恒定的时间内(更少的代码)获得它们。

需要注意的一点是,如果将Actor名称纳入边缘情况的条件更加复杂,则这种方法将不适用,在这种情况下,我认为O(n²)实际上是您可以获得的最佳选择,除非您可以申请二进制搜索或找到边缘情况的东西。