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

时间:2018-03-06 07:43:35

标签: r excel vba excel-vba

我目前正在学习DataCamp上的 R 简介,并且在一次练习中(性别之战)有一个像这样的指令:

  

阅读编辑器中的代码,然后点击“提交答案”以测试x = cols - 1; y = rows - 1;   大于(male>

上述指示激发了我在RStudio中测试以下代码:

female

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

enter image description here

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

4 个答案:

答案 0 :(得分:15)

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

  

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

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

答案 1 :(得分:4)

在C#等其他语言中,您无法将字符串与

进行比较
   "Male" > "Female"

答案 2 :(得分: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

对于其他语言,它将类似

答案 3 :(得分:2)

在“灵活性较差”的编程语言中,您无法使用“>”或“<”运算符来比较字符串。

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

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

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

如果你想让它更具女权主义色彩,你可以比较“Ma​​dame”(法语女士)和“Hombre”(西班牙语男士):)