我目前正在学习DataCamp上的 R 简介,并且在一次练习中(性别之战)有一个像这样的指令:
阅读编辑器中的代码,然后点击“提交答案”以测试
x = cols - 1; y = rows - 1;
大于(male
)>
上述指示激发了我在RStudio中测试以下代码:
female
令我惊讶的是,R给了我输出'Male' > 'Female'
!我也试过Excel和VBA,两者都提出了输出TRUE
!现在,我开始认为他们是用性别歧视观点编程的语言(开个玩笑,嘿嘿...... )。
所以我想知道,这里到底发生了什么?有谁能在这里向我解释一下吗?对于其他编程语言,这也适用TRUE
吗?为什么呢?
答案 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”(具有更高的序数),因此字符串比较会给出结果。
如果你想让它更具女权主义色彩,你可以比较“Madame”(法语女士)和“Hombre”(西班牙语男士):)