排列宝石

时间:2011-05-30 16:34:24

标签: ruby permutation ruby-1.8

我正在尝试获取字符串列表,这些字符串是字母,数字和短划线的排列,长度从1到63不等。 我正在使用排列gem,并尝试使用join('')获取字符串。

length = 1
alphabet = [('a'..'z').to_a, ('0'..'9').to_a, ('-').to_a].flatten
while length < 64
  puts (alphabet.permutation(length){|x| p x}).join('')
  length += 1
end

我得到的输出如下:

["r", "q", "l"]
["r", "q", "m"]

我确信我在这里缺少一些基本的东西。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

不确定您要完成的任务。以下代码(简化示例)如何:

['a','b','c'].permutation(3).collect { |x| x.join('')}

返回,

=> ["abc", "acb", "bac", "bca", "cab", "cba"] 

答案 1 :(得分:1)

因此,让我们用这种机制进行SQL查询:

假设我想在数据库中找到一个人。人有名字和姓氏,而不仅仅是'姓名'。为了使其更复杂,Firstname和Lastname可能包含许多单词。

...所以我们的搜索引擎包含“Jo Svenda Schmidt”,其中“Jo Svenda”是名字。

query = "Jo Svenda Schmidt".split
=> ["Jo", "Svenda", "Schmidt"]
query.permutation(query.length).collect { |x| x.join(" AND ") }.join(" OR ")

=> "Jo AND Svenda AND Schmidt OR Jo AND Schmidt AND Svenda OR Svenda AND Jo AND Schmidt OR Svenda AND Schmidt AND Jo OR Schmidt AND Jo AND Svenda OR Schmidt AND Svenda AND Jo"

这几乎是我们想要的,但不是全部。我们需要添加列名并对其进行分组。 分组可能很简单,只是     ...加入(“)OR(”) 在和,然后在结果查询的末尾添加“(”到开头和“)”。

但是如何在此查询中添加'Firstname ='和'Lastname ='或'LIKE'?