为什么在R,Excel和VBA中男性>女性等于TRUE?用其他语言怎么样?

问题描述 投票:6回答:4

我正在学习这门课程:关于DataCamp的R介绍和一项练习(性别之战)有一个这样的指令:

阅读编辑器中的代码,然后单击“提交答案”以测试male是否大于(>female

上面的指令激发了我在RStudio中测试以下代码:

'Male' > 'Female'

令我惊讶的是,R给了我输出TRUE!我也试过Excel和VBA,两者都想出了输出TRUE!现在,我开始认为他们是用性别歧视观点编程的语言(开玩笑,呵呵......)。

enter image description here

所以我想知道,这里到底发生了什么?有谁能在这里向我解释一下吗?对于其他编程语言,这也适用于TRUE吗?为什么?

r excel vba excel-vba
4个回答
15
投票

对于R,请参阅help('>')或其文档here,以及有关collation的维基百科链接:

“字符向量中的字符串比较是使用所使用的语言环境的整理顺序在字符串中进行词典编辑:请参阅语言环境。诸如en_US之类的语言环境的整理顺序通常与C(应该使用ASCII)不同,并且可能会令人惊讶。对整理顺序作出任何假设:例如,爱沙尼亚语Z介于S和T之间,整理不一定是逐个字符 - 在丹麦语中,在z之后作为单个字母排序。

总结一下;在您的语言环境中,“F”的值小于归类序列中的“M”值,因此Mxxx大于Fyyy


4
投票

在其他语言如C#中,你无法比较字符串

   "Male" > "Female"

4
投票

例如,VBA将第一个Letter转换为ASCII,然后进行比较。

MsgBox Asc("male") '= 109
MsgBox Asc("female") '= 102
MsgBox Asc("Male") '= 77
MsgBox Asc("Female") '= 70

这就是为什么它说"male" > "female" is true。但是"Male" > "female" is false

对于其他语言,它将是类似的


2
投票

在“不太灵活”的编程语言中,您不能使用“>”或“<”运算符来比较字符串。

在“更灵活”的编程语言中,例如VBA,您可以在其中编写:

b = “3”
a = 5 + b
>> a = 8 (implicit conversion of string to number)

...当应用更大或更小的运算符时,您可以通过序数(与ASCII表中的字母关联的数值)来评估字符串。并且由于字母表中的“M”比“F”(具有更高的序数)更高,因此字符串比较会给出结果。

如果你想要它更具女权主义,你可以比较“夫人”(法语女人)和“Hombre”(西班牙语男人):)

© www.soinside.com 2019 - 2024. All rights reserved.