我有一个已排序的StringList,想要替换

foreach (string line3 in CardBase.cardList)
            if (line3.ToLower().IndexOf((cardName + Config.EditionShortToLong(edition)).ToLower()) >= 0)
            {
                return true;
            }


使用binarySearch时,因为cardList相当大(〜18k),并且此搜索占用了大约80%的时间。

所以我找到了List.BinarySearch-Methode,但是我的问题是cardList中的行看起来像这样:

Brindle_Boar_(Magic_2012).c1p247924.prod


但是我无法生成c1p ...,这是一个问题,因为List.BinarySearch只找到完全匹配的内容。

如何修改List.BinarySearch,以便仅在字符串的一部分匹配时找到匹配项?

e。 G。
搜索Brindle_Boar_(Magic_2012)应该返回Brindle_Boar_(Magic_2012).c1p247924.prod

最佳答案

如果未找到完全匹配的内容,List.BinarySearch将返回比请求大的下一项索引的全数。

因此,您可以这样进行操作(假设您永远不会获得完全匹配):

var key = (cardName + Config.EditionShortToLong(edition)).ToLower();
var list = CardBase.cardList;

var index = ~list.BinarySearch(key);
return index != list.Count && list[index].StartsWith(key);

关于c# - 带有通配符的BinarySearch StringList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6876973/

10-12 12:49