Ruby Array按元素自身分块是否存在简便语法糖?
更简洁的替代方案:
chunk(&:itself) 嘿,这个问题问得很到位!确实有个超简洁的语法糖能替代你一直在用的chunk{|x| x}写法——Ruby早就为这种「按元素自身对连续重复项分块」的场景准备好了捷径!
为什么这个语法糖可行?
你写的块{|x| x}本质就是返回元素本身,而Ruby的&:method_name语法是Symbol#to_proc特性的简写,它会把符号转换成一个调用对应方法的Proc。刚好Ruby的所有对象都有itself方法,这个方法的作用就是返回对象本身——完美匹配你的块逻辑!
实际示例验证
用你给出的数组测试一下,效果完全一致:
an_array = [4,4,4,5,6,6,6,6,7,7] # 用语法糖替代原写法 an_array.chunk(&:itself).to_a # => [[4, [4, 4, 4]], [5, [5]], [6, [6, 6, 6, 6]], [7, [7, 7]]]
额外小补充:其他类似场景的写法
如果之后你需要更灵活的连续项分组(比如自定义相邻元素的判断逻辑),还可以试试chunk_while:
# 按相邻元素相等分组,返回直接是子数组的集合 an_array.chunk_while(&:==).to_a # => [[4, 4, 4], [5], [6, 6, 6, 6], [7, 7]]
不过这个返回结构和chunk不同,没有[key, group]的外层结构,如果你需要保留原chunk的输出格式,chunk(&:itself)依然是最贴合需求的选择。
内容的提问来源于stack exchange,提问作者Tyl
相关产品推荐
相关产品推荐

