例如,单词"stack",我想获得一个类似的数组:
我通过以下代码实现了这个功能:
有更好、更简洁的方法吗?谢谢。
['s', 'st', 'sta', ... 'stack', 't', 'ta', ... , 'c', 'ck', 'k']
我通过以下代码实现了这个功能:
def split_word(str)
result = []
chas = str.split("")
len = chas.size
(0..len-1).each do |i|
(i..len-1).each do |j|
result.push(chas[i..j].join)
end
end
result.uniq
end
有更好、更简洁的方法吗?谢谢。
collect
),而是一种折叠或更普遍的泛函递归(在Ruby中称为inject
或reduce
)。 - Jörg W Mittagmap
只是fold
的一种特殊情况 :-) 基本上,map f = foldr (λx y → f x : y) []
。你在评论中提供的一般描述描述了fold
的一般情况,但对于你所说的具体示例,当然是map
。特别地,当init empty
是与原始集合相同类型的集合,并且iterate
只是应用转换函数,而push
推送所有元素时,它就是一个map
。实际上,fold
是通用的:任何迭代(map
、select
、count
等,甚至是each
)都可以表示为fold
。 - Jörg W Mittag