在机器对机器通信场景中使用的正确字符串比较值是啥?

Posted

技术标签:

【中文标题】在机器对机器通信场景中使用的正确字符串比较值是啥?【英文标题】:What is the right string comparison value to be used in a machine to machine communication scenario?在机器对机器通信场景中使用的正确字符串比较值是什么? 【发布时间】:2020-08-26 22:19:09 【问题描述】:

考虑一个场景,您正在实现旨在用于机器对机器通信的代码。典型的例子是在 Web API 操作方法中执行的代码。

假设你想在字符串之间进行精确匹配;也许你有一个用户列表,你想找到一个提供用户名的特定用户:

List<User> users = ....
const string username = "user-123";
var user = users.Find(u => string.Equals(username, u.UserName));

在这种情况下我应该使用StringComparison.Ordinal 还是StringComparison.InvariantCulture

根据我的理解,由于我想在两个字符串之间执行完全匹配,所以这里的正确选择是StringComparison.Ordinal

两个字符串Straßestrasse 之间的文化敏感比较 的典型示例(由于语言规则,这两个字符串被认为是相等的)似乎不适合这里。

这个假设正确吗?

如果这是正确的,您能否提供一个使用不变文化的示例 而不是序数比较是正确的选择?

澄清一下,我之所以这么问,是因为我正在开发一个代码库,其中有大量使用不变文化的字符串比较。其中许多案例涉及在机器对机器通信场景中执行的精确字符串匹配。所以我想确保清楚地理解正确选择字符串比较值背后的基本原理。

【问题讨论】:

【参考方案1】:

从提供的详细信息看来,您的假设是正确的 - 您希望找到名称为“Bob”的特定用户。 “Bób” 是不同的用户,不应匹配,即您实际上是在尝试匹配两个符号,而不是用户名的读取方式。

但是,如果您正在查找街道名称,您可能希望要求代码将“strasse”和“Straße”视为相同,因为您正在进行语言匹配,即客户是否会阅读这些两件事以同样的方式。

【讨论】:

所以重点是您正在执行的比较的语义。如果您将两个字符串视为字节序列(符号,如上所述),则要进行的比较是序数比较。反之亦然,如果您认为这两个字符串具有语言含义,则必须执行文化敏感比较。正确吗? 所以下一个自然问题如下:在哪些情况下,我应该更喜欢不变的文化(基本上是基于英语的文化)而不是更具体的文化,例如 en-gb 文化? 对我来说听起来像是一个单独的问题:) 我针对不变的文化用法发布了一个单独的问题 (***.com/questions/61740030/…)

以上是关于在机器对机器通信场景中使用的正确字符串比较值是啥?的主要内容,如果未能解决你的问题,请参考以下文章

机器视觉定位是啥?和机器视觉检测有啥不同?

使用机器学习比较树木变化的最佳技术/算法是啥?

同一台机器上的两个程序相互通信的最佳方式是啥

这个货币机器人的正确组织是啥 - 代码明智?

在 Facebook Messenger 机器人中保存/跟踪状态的正确方法是啥?

在硬件上 C++ 和 Python 之间进行通信的最佳方式是啥? [关闭]