我认为这是一个很棒的Ruby单行程序:
someArray.sort_by {rand}
Run Code Online (Sandbox Code Playgroud)
它简洁,可读,而且有效 - 但我不太明白.这就是我所知道的:
rand
求值为0到1之间的数字(如0.783468632804653)rand
正在上面的代码中重复评估,因为将其分配给x
第一个会破坏随机排序sort_by {0.783468632804653}
,或我尝试的任何其他数字,对阵列没有影响在这种情况下, ruby-doc.org对我没什么帮助.
有人可以一步一步地解释这个吗?
我现在一直在使用Ruby,我发现我在这里错过了一两个概念.关键是:
rand
是一种方法(在内核上定义); 它会生成一个随机数{rand}
是一个块,它sort_by
保持,每次想要比较集合中的两个项目时调用它.如果集合是一堆代表国家的对象,它需要能够抓取其中的两个并确定哪个是第一个.你先放一个名字最长的那个吗?土地面积最大的那个?该区块应该通过返回一个值"回答一个问题"来回答这个问题:"你问过西班牙对喀麦隆,我说喀麦隆是第一个." (你可以这样做{|country| country.name.length}
其余的sort_by
工作原理在文档中进行了解释.我仍然不太确定为什么返回一个随机数可行 - 大概是将sort_by
它舍入为-1,0或1,哪个最接近?但无论如何,每次调用块时获取不同的随机数与每次获取相同的数字完全不同.什么时候sort_by
说"这两个国家中的哪一个先来?",{rand}
戴上眼罩,转过10次,然后说"那个!" :)
ruby ×1