好吧,我在Ruby中有关于数组和迭代的问题。我是个菜鸟。 让我们谈谈这一点。这是问题所在:
然后我有了这段代码
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等等。答案 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)
由您决定哪个版本更适合您。