Пермутация жемчужина - PullRequest
0 голосов
/ 30 мая 2011

Я пытаюсь получить список строк, которые представляют собой перестановки букв, цифр и тире, длина которых варьируется от 1 до 63. Я использую камень перестановок и пытаюсь получить строки с 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 ]

2 голосов
/ 30 мая 2011

Не уверен, что вы пытаетесь достичь.А как насчет следующего кода (упрощенный пример):

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

Returning,

=> ["abc", "acb", "bac", "bca", "cab", "cba"] 
1 голос
/ 22 сентября 2011

Итак, давайте сделаем SQL-запрос с помощью этого механизма:

Допустим, я хочу найти человека в базе данных.Персона имеет имя и фамилию, а не просто «имя».Чтобы сделать его более сложным, имя и фамилия могут содержать много слов.

... поэтому у нас есть строка запроса из нашей поисковой системы, содержащая "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"

Это почти то, что мы хотим, но не все.Нам нужно добавить имена столбцов и сгруппировать их.группировка может быть простой, просто ... join (") ИЛИ (") в и, а затем добавьте "(" в начало и ")" в конец результирующего запроса.

Но какдобавить красиво 'Firstname =' и 'Lastname =' или 'LIKE' к этому запросу?

...