文本数据是如何判断大小的?


请教:如图,输入的数据类型为文本时,函数X>Y是基于什么逻辑判断布尔值的?

1:你可以做大量实验,提供几个有参考价值的
a vs b
ab vs aa
aaa vs aa
b vs aaaa
aaab vs aaaa
2:你可以谷歌搜索一下"C string relational operators" 获取更详细的资讯


特别提醒一下,很多用户会有使用panel作为输入数据的习惯
panel默认输出的是字符串,将字符串接入一些对输入端有数字类型要求的电池时不会出问题,因为他们会在输入时自动转化为数字
但是expression电池需要特别当心的是,他们对输入端没有要求“数字类型”,也就是允许任何类型的输入。
因此他们不会将字符串强制转化为数字。

在使用panel作为输入时,需要特别当心不要和expression混在一起使用。以免出错

2 个赞

谢谢版主。因为自己没有程序设计语言的相关基础知识,搜索查询了"C string relational operators"相关网页,其中的案例好像也只是讨论了数字之间的逻辑关系判断,对于其他类型的字符串,我没能找到其他有用的相关解释信息,不了解具体的转化机制。试了几次在GH中好像也不尽是比较字符串的长短,不知道是不是有一套转化的规则。可以的话,希望鹿神可以有空帮忙具体解释下其中的具体转化规则。谢谢。

不要用好像来描述确凿无误存在于网上的信息,这是一种求知态度。


我就以谷歌搜到的第一个讯息为例。

在这里你又用了“好像”的字眼。
就按照我发给你的几个样例为例
a vs b
ab vs aa
aaa vs aa
b vs aaaa
aaab vs aaaa
我不知道你到底尝试了没有,是抱着随便的态度尝试的,一眼看不出规律就放弃,还是真的用心去思考的。


如图,从这里得知a是小于b的
根据我们的英文知识,字母表中a确实是排列在b前面

当我们用两个字符时,发现ab要大于aa
说明第一个字符相同的情况下他会判断第二个,而第二个字符则是b>a,所以ab>aa

当我们用不同长度比较时,发现字母多的>字母少的

于是我们换一个思路,采用b来单挑四个a,发现b>aaaa
说明他在比第一个字母时,aaaa就输了

再次验证一下我们之前的看法,字母数量相同时,挨个比较字母顺序

为此我们初步得到了结论:
一个个字母往后比较,如果不同,则按照该字母大小对字符串判断大小
如果相同,继续比较后一个字母
如果一直比到都相同,但是一方没有字母了,则另一方获胜。

经过几个实验后我们验证了以上结论。

以上内容都是我在看到你发帖以后现场做实验的。因为这个问题我是第一次遇到,并没有任何先验知识。
你可以这么认为,在这个问题上我和你一样都处于未知的状态。

我刚才的步骤是拿到你的问题后,我自己做了5分钟的实验,摸索出了逻辑,然后我在谷歌搜索,确定了这套逻辑的正确性。同时也排除了一些谷歌上搜到的错误信息。

之后我整理了最有典型性 能发现规律的四个组合,按照顺序排列,回帖告诉你。并告诉你谷歌搜索的关键字,我相信一个具备基础的主观能动性的用户,在经过了提示以后一定可以获取到问题的答案。

得到的解答是你谷歌也好像搜不出,给你的样例也好像找不到规律。
你我同样是面对一个新鲜问题,为什么结果会截然不同呢

这就是鹿神是版主的原因。之前的回复我可能描述的不全,英文字母的判断逻辑是正确的,但是还是没有得到我想要的那个转化的具体机制。对于其他字符,比如前面的中文以及中文加字母,就是因为试半天没试出来,自己也没能在网上找到有用的信息。因为这里是官方论坛,对于一个普通用户,到这里求助也是想得到及时和准确的帮助,官方论坛提供的答案肯定比自己试的结果准确且节约时间。虽然没有得到更为具体的答案,还是感谢鹿神的指导,向鹿神学习。

在研究中文之前你可以先把英文+数字+符号等研究一下
他们可以用unicode或者ascii码来比大小,具体的大小表格你可以直接百度


至于中文的问题会更复杂,汉字的大小你也可以去查阅编码

在GH中可以使用character电池


正如你所见,中文的编码很大很大,储存方式也不太一样,这就是为啥中文是两个字节(0-32767)记录,英文是一个字节(0-255)

我不太建议你去比较完全不相干的字符串,例如"犀牛"和"abc"
这并没有实际的操作意义,中英文混合也意义不大。
如果只是学习阶段碰到好奇,可以跳过。

如果是具体碰到了技术问题,最好是描述技术问题的源头问题。

你的提问需要更加具体明确,自己已经搞清多少信息,还没搞清的那部分是什么,越具体越好。

补充一下,由于GH的开发基于C#语言环境,你的一开始的问题 字符串对比,其实是和C#语法和规则相关的, 和GH本身关系并不大。如果将来碰到类似的问题,建议你可以先从这方面着手搜索。
也正因为如此,这类问题很容易就触及到编程领域,这个时候你如果想要追根溯源,免不了要花一番功夫去啃那个自己不怎么熟悉的领域。

不是具体的技术问题,是正在学习《Grasshopper 中的核心算法与数据结构》,第14页,看到关于expression中对于输入端是文本类型得到得到结果是“99”>“100”,当时只提到这个注意事项,没有具体解释,所以好奇原因,其实就是想了解您说的“C#语法和规则”,因为没有相关基础知识,所以到论坛求助。原来电池character可以返回字符的Unicode,这就都能解释的通了。
谢谢deer,问题解决。