首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ruby中组合/排列?

如何在ruby中组合/排列?
EN

Stack Overflow用户
提问于 2012-01-26 21:45:27
回答 3查看 3K关注 0票数 6

我有一个熟悉的问题,看起来像是数学世界的排列/组合。

如何通过ruby实现以下功能?

代码语言:javascript
复制
badges = "1-2-3"

badge_cascade = []
badges.split("-").each do |b|
  badge_cascade << b
end

Gives: => ["1", "2", "3"]

But I want it to be is:

=> ["1", "2", "3", 
  "1-2", "2-3", "3-1", "2-1", "3-2", "1-3", 
  "1-2-3", "2-3-1", "3-1-2"]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-26 22:30:19

函数式方法:

代码语言:javascript
复制
bs = "1-2-3".split("-")
strings = 1.upto(bs.size).flat_map do |n| 
  bs.permutation(n).map { |vs| vs.join("-") } 
end
#=> ["1", "2", "3", "1-2", "1-3", "2-1", "2-3", "3-1", "3-2", "1-2-3", "1-3-2", "2-1-3", "2-3-1", "3-1-2", "3-2-1"]
票数 8
EN

Stack Overflow用户

发布于 2012-01-26 21:55:28

你需要使用Array#permutation方法来获得所有的排列:

代码语言:javascript
复制
arr = "1-2-3".split '-' # => ["1", "2", "3"]
res = (1..arr.length).reduce([]) { |res, length|
  res += arr.permutation(length).to_a
}.map {|arr| arr.join('-')}

puts res.inspect
# => ["1", "2", "3", "1-2", "1-3", "2-1", "2-3", "3-1", "3-2", "1-2-3", "1-3-2", "2-1-3", "2-3-1", "3-1-2", "3-2-1"]

让我来解释一下代码:

  1. 您可以将字符串拆分为数组,将分隔符'-'传递给String#split方法
  2. 您需要长度为1、2、3的所有排列。Range 1..arr.length表示所有这些长度。
  3. 您可以使用C11收集所有排列的数组。你将在这里得到数组的数组:

["1","2","3","1","2","1","3","2","1","2","3","3","3","2","1","2","3","1","3","3","2","1","3","2",“3”,"1","3","1","2","3","2",“1”]

  • Enumerable#map

中使用'-'分隔符,使用Array#join将此数组的所有子数组转换为字符串

票数 5
EN

Stack Overflow用户

发布于 2012-01-26 21:56:46

Array#permutation(n)会给出长度为n的所有排列作为数组的数组,所以你可以调用它,每个排列的长度介于1和徽章中的位数之间。最后一步是将所有这些内容映射回以-分隔的字符串。

代码语言:javascript
复制
badges = "1-2-3"

badges_split = badges.split('-')

permutations = []

(1..badges_split.size).each do |n|
    permutations += badges_split.permutation(n).to_a
end

result = permutations.map { |permutation| permutation.join('-') }

更新:我认为reduce的使用是一种更优雅的方法,但我将把这个答案留在这里,以防它有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9019007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档