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

问题描述 投票:0回答:1

我的问题基本上是,我有一个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]);
                }
            }
        }
c#
1个回答
0
投票

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

Lists的整个问题是你必须遍历它们才能找到你想要的东西,而你可以用Dictionary在恒定的时间内(以及更少的代码)。

值得注意的是,如果Actor名称的条件落入边缘情况更复杂,这种方法是不合适的,在这种情况下,我认为O(n²)实际上是最好的,除非您可以应用二进制搜索或找到边缘情况的东西。

© www.soinside.com 2019 - 2024. All rights reserved.