我的问题本质上是,我有一个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]);
}
}
}
答案 0 :(得分:0)
解决了评论,只是形式化了:使用Dictionary
。
列表的整个问题在于,您必须遍历它们才能找到所需的内容,而使用Dictionary
可以在恒定的时间内(更少的代码)获得它们。
需要注意的一点是,如果将Actor名称纳入边缘情况的条件更加复杂,则这种方法将不适用,在这种情况下,我认为O(n²)实际上是您可以获得的最佳选择,除非您可以申请二进制搜索或找到边缘情况的东西。