【问题标题】:Which is more performant: 'replace' or 'substring'?哪个性能更高:“替换”或“子字符串”?
【发布时间】:2021-07-26 05:21:12
【问题描述】:

我经常发现我可以使用Substringreplace 对字符串执行我需要执行的操作。

例如:获取本地 repo 的远程 GitHub URL:

  1. (git remote get-url origin).replace('.git', '')
  2. $url = git remote get-url origin
    $url.substring(0, $url.indexof('.git'))
    

显然是多出一行,但值得吗?

如果有的话,是否有技术原因使用其中一个?

【问题讨论】:

  • 你好。不幸的是,在我看来,正如你所说:“个人喜好”。

标签: string powershell replace substring


【解决方案1】:

当然,这是一种偏好。这也是情境性的,您最好尝试将工具放入工具箱并尝试了解何时最好使用哪个。而且,我认为这在很大程度上是您的问题所在。

有 2 个可行的解决方案,这个特定的例子是最不用担心的。但是,我要指出.Replace() 区分大小写,许多其他底层.Net 字符串方法也是如此。 .Substring() 处理索引不是,但在您的示例中,您依赖默认情况下区分大小写的 .IndexOf()`。

Per mklement0 的有用 cmets:

.IndexOf() & LastIndexOf() 可以使用额外的重载设置为不区分大小写:

"SomEthing".IndexOf("e", [System.StringComparison]::OrdinalIgnoreCase)

注意:.Net 4.x 及更低版本中的.Replace() 没有不区分大小写的模式,因此任何版本的 Windows PowerShell 也没有它。 .Net core 确实有这个选项,所以它在 PowerShell 6+ 中可用。

对于.Replace().Split(),使用PowerShell 原生-replace-split 会更安全一些。这不仅在默认情况下不区分大小写,而且还使您免受 .Net 方法的潜在变化的影响,正如 .Split() 从 .Net 到 .Net Core 的重载首选项实际上发生的那样。

也就是说,作为如何做出此类决定的示例,.Net 方法更快。因此,根据情况,您可能会选择在 PowerShell 本机运算符上使用它们。请注意注意事项,包括但不限于此处讨论的内容。

注意:.StartsWith().EndsWith() 也区分大小写,因此我们可以改为使用 -match "^string"-like "string*" 检查这些条件。同样,这些只是您如何在 2 种不同技术之间做出选择的其他示例。

【讨论】:

  • 这是一个很棒的答案,我觉得你已经提供了如何客观和主观地做出这个决定的例子。
  • 感谢您的反馈。很高兴知道我正在对社区产生影响。
  • 感谢更新,史蒂文。快速术语说明:.NET Framework 是 .NET 的仅限 Windows 的旧版本,Windows PowerShell 是在其上构建的,并且将保留在其上。 4.8 是最新的也是最后一个发布的版本。 .NET Core 是直到 3.1 版的独立跨平台版本的名称。从 5.0 开始,名称的 Core 部分被删除,就像在 v7 发布时使用 PowerShell (Core) 的情况一样。因此,从 v5 开始的任何 .NET 版本都指的是跨平台版本(就像任何从 v6 开始的 PowerShell 版本一样)。
  • 要查看特定 .NET 版本是给定 PowerShell 版本的基础,请运行 [System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription
  • 好的,我进一步完善了该更新。感谢 .Net 5 向我提供的信息。想知道为什么 Windows PowerShell 要求文档没有提到它。注意:[System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription 似乎在 5.1 中不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2023-03-11
  • 2018-08-01
  • 1970-01-01
相关资源
最近更新 更多