如何删除多次具有相同字母的单词?

时间:2017-11-12 08:37:04

标签: ruby-on-rails ruby

我正在尝试删除多次具有相同字母的单词。我试过挤压,但所有这一切都是删除彼此相邻的重复字母的单词。

目前的代码如下:

array = []

File.open('word.txt').each do |line|                                               
  if line.squeeze == line 
    array << line
  end
end

从word.txt输入

start
james
hello
joins
regex

我正在寻找的输出

james
joins

关于我如何解决这个问题的任何建议。

2 个答案:

答案 0 :(得分:2)

也许是这样的:

array = []

File.open('word.txt').each do |line| 
  chars = line.chars                                              
  array << line if chars.uniq == chars
end

或更短:

array = File.open('word.txt').select { |word| word.chars.uniq == word.chars }

答案 1 :(得分:1)

您可以使用正则表达式,例如:

re = /
  (.)  # match and capture a single character
  .*?  # any number of characters in-between (non-greedy)
  \1   # match the captured character again
/x

示例:

'start'[re] #=> "tart"
'james'[re] #=> nil
'hello'[re] #=> "ll"
'joins'[re] #=> nil
'regex'[re] #=> "ege"

可以传递给grep以返回所有匹配的行:

IO.foreach('word.txt').grep(re)
#=> ["start\n", "hello\n", "regex\n"]

grep_v返回其他行:

IO.foreach('word.txt').grep_v(re)
#=> ["james\n", "joins\n"]