gpt4 book ai didi

c# - 这是搜索子字符串的最有效方法吗?

转载 作者:太空狗 更新时间:2023-10-30 00:16:26 27 4
gpt4 key购买 nike

我正在处理一些代码,这些代码会返回一个代码来指示他们的用户类型(例如“A”、“B”、“C”、“D”等)。每个代码对应一个特定的角色和/或范围(例如,跨整个应用程序或仅针对正在处理的对象)。

在我查看的一些代码中,我看到调用来检查用户的代码是否是多个代码之一,以便允许他们执行某些操作。所以我看到这样的电话:

//"B" would come from the database
string userCode = "B";

//some more work...

//if the user's code is either A or C...
if("AC".IndexOf(userCode) >= 0) {
//do work that allows the user to progress
} else {
//notify user they can't do this operation
}

这是执行此检查的有效方法吗?有没有更有效的方法?

提前致谢!

最佳答案

查看 Contains() 的反编译代码, 它只是调用 IndexOf()StringComparison.Ordinal ,所以我会说 IndexOf()如果以相同的方式使用(序数)是最有效的(通过非常小的头发)我因为它有一个较少的方法调用,但是 Contains()更具可读性,因此更易于维护......

public bool Contains(string value)
{
return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}

与所有事情一样,我会选择更具可读性和可维护性的方法,然后再考虑性能问题。仅当您知道此时存在瓶颈时才进行微优化。

更新:超过 1,000,000 次迭代:

  • 包含(值)- 耗时 130 毫秒
  • IndexOf(value, StringComparison.Ordinal) - 耗时 128 毫秒

正如您所看到的,非常非常接近相同。再一次,选择更易于维护的东西。

更新 2:如果您的代码始终是单个字符(而不是 1 个字符的字符串),则 IndexOf() 更快:

  • 包含(字符值)- 耗时 94 毫秒
  • IndexOf(char value) - 耗时 16 毫秒

如果您知道您的字符代码始终是单个字符,那么使用 IndexOf() 会快一个数量级带有一个 char 参数。

这是因为Contains(char value)IEnumerable<T> 的扩展方法而不是 string 的一流方法.

但是再一次,在 1,000,000 次迭代中约 100 毫秒确实非常非常微不足道。

关于c# - 这是搜索子字符串的最有效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164711/

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