Ruby条件,数组和迭代

时间:2014-06-24 13:45:36

标签: ruby arrays conditional

好吧,我在Ruby中有关于数组和迭代的问题。我是个菜鸟。 让我们谈谈这一点。这是问题所在:

  1. 我有一个数组,让我们说名字是myary = []
  2. myary包含索引1 - 25的25个整数数据,它们是整数1 - 25.索引0是零。
  3. 我有一个变量,假设名字是myvar(我不知道这个变量的值)。
  4. 然后我有了这段代码

    puts "I can do that"
    

    现在执行任务: 只有当myvar的值不是1,2,3时才会执行“我能做到”,等等直到25。 问题是如何检查myvar的值?如果myvar的值不在1到25之间,那么如何给订单执行put“我能做到”。我可以这样试试:

    puts "I can do that" if myvar != 1 || myvar != 2 || myvar != 3  # and so on until myvar != 25
    

    但我相信这是荒谬的,如果我需要检查到100,那么我会被诅咒。 也许有一种优雅的方式来做到这一点。也许有人可以像我一样帮助一个菜鸟。

    我希望我能清楚地解释清楚,因为我自己对这个该死的任务有点困惑。 非常感谢你们。

    编辑:对不起,我早些时候没有提到它,我只是弄清楚困扰我的事情,我注意到如果myvar是一个介于1-25之间的浮点数,它就不应该执行代码“我能做到”。 现在这让我更加疯狂。但是感谢这里的每一个答案,虽然我尝试它仍然打印出“我能做到”,当myvar的值是一个浮点数,即1.5,2.5等等。

3 个答案:

答案 0 :(得分:3)

我认为你想要的是这个

puts "I can do that" unless myary.include?(myvar)

答案 1 :(得分:2)

您可以将myvar与范围进行比较:

puts "I can do that" unless (1..25) === myvar

答案 2 :(得分:0)

由于您似乎没有在评论中注意到这一点,我会将其转化为答案并进行更多解释。您可以执行以下操作:

myary = (1..25).to_a
puts "I can do that" unless myary.include? myvar

第一行将范围1..25变为一个数组,其中元素从1到25在索引0到24处,这样可以避免数组中的nil首先没有帮助。如果符合你的要求,我会稍微修改一下代码以便更容易看到:

myary = (1..25).to_a
[0, 1, 2, 10, 10.5, 20, 24.5, 25, 26, nil].each do |myvar|
  puts "I can do that (#{myvar})" unless myary.include? myvar
end

这会产生

I can do that (0)
I can do that (10.5)
I can do that (24.5)
I can do that (26)
I can do that ()
 => [0, 1, 2, 10, 10.5, 20, 24.5, 25, 26] 

这对应于我对你似乎想要的东西的理解(即使它似乎与你最后的句子相矛盾,似乎与之前所写的内容相矛盾: - )。

如果您不想要,请随时添加您的问题。

如果确实不希望为(1..25)范围内的浮点打印行,那么数组将只是错误的数据结构,您应该使用概述的范围早。使用与以前相同的测试值:

[0, 1, 2, 10, 10.5, 20, 24.5, 25, 26].each do |myvar|
  puts "I can do that (#{myvar})" unless (1..25).include? myvar
end

你最终得到了

我能做到(0)    我能做到(26)

由您决定哪个版本更适合您。