是否有宝石或库来获取像
这样的ruby 1.9方法[1, 2, 3].combination(2)
[1, 2, 3].permutation(2)
[1, 2, 3].product([1, 2, 3])
[1, 2, 3, 4, 5].cycle
答案 0 :(得分:8)
这正是我的宝石backports
的目标。
它在纯Ruby中实现了Ruby 1.8.7的所有新功能以及许多Ruby 1.9.x和2.0。这当然包括#combination
,#permutation
,#product
和#cycle
。
您可以,例如:
require 'backports/1.8.7/array/combination'
[1, 2, 3].combination(2) # => works, even in Ruby 1.8.6
backports
中的实施通过大多数RubySpecs(facets
不是这种情况),以保证不存在兼容性问题。
答案 1 :(得分:3)
您可以尝试使用1.8.x版本的Ruby Facets(http://facets.rubyforge.org/)。 Facets已经变得有点混乱(在网站上注释404),但我安装了旧版本的gem(1.8.54),其中包含一些标准前的更改。
> gem install --version=1.8.54 facets
然后:
gem 'facets', "~>1.8"
require 'enumerator'
require 'facets/core/enumerable/cartesian_product'
require 'facets/core/enumerable/permutation'
require 'facets/core/enumerable/each_combination'
[1, 2, 3].enum_for(:each_combination,2).to_a # note - only each form is available
[1, 2, 3].permutation(2)
[1, 2, 3].cartesian_product([1, 2, 3]) # note - rename
# Can't find .cycle equivalent after a quick search, maybe nothing there
您可能希望为这些方法中的某些方法添加别名以获得代码兼容性。
抱歉,这不太好。