我可以在比较期间迭代一个数组吗?

时间:2013-02-07 06:55:48

标签: ruby-on-rails ruby

s = Array.new 

s << 19 
while (s.last + 19) < 100000 do
  s << s.last + 19 
end

这^工作。 s是19以下100,000的所有因子的数组。
我试图在一个简洁的陈述中找到s中的所有数字,其中该数字的反转也在数组中。例如:176和671。

reflections= s.select { |num| num.to_s.reverse == s.each.to_s }

我知道这是错误的,但我如何针对整个阵列检查每个反转的项目?

3 个答案:

答案 0 :(得分:3)

这应该有效:

reflections = s.select { |num| s.include?(num.to_s.reverse.to_i) }

虽然它产生了你可能没有预料到的结果

s = [176, 234, 671, 111]

reflections = s.select { |num| s.include?(num.to_s.reverse.to_i) }

reflections # => [176, 671, 111]

根据您的逻辑,这些都是有效的结果。

排除自我匹配非常简单:

s = [176, 234, 671, 111]

reflections = s.select do |x|
  x = x.to_s
  r = x.reverse
  (x != r) && s.include?(r.to_i)
end

reflections # => [176, 671]

答案 1 :(得分:2)

reflections = s & s.map{|num| num.to_s.reverse.to_i}

答案 2 :(得分:0)

尝试:

reverse_array = s.select {|num| num.to_s == num.to_s.reverse }

更新:

检查后我发现这样可行:

myarr = ""
s = (1..1000)    
s.select{ |num| 

unless s.include?(num.to_s.reverse.to_i)   
   myarr << num.to_s
end

}  

最后,myarr将包含数组s中反向的所有数字。