【问题标题】:Using a loop to find greatest integer in array using Ruby [closed]使用循环在使用 Ruby 的数组中查找最大整数 [关闭]
【发布时间】:2016-02-17 20:54:04
【问题描述】:

我需要在 Ruby 中使用循环找到数组中的最大整数

例如:数字 = [10, 20, 30, 40, 50, 60]

注意我不能使用 .max 函数。必须是一个循环。

【问题讨论】:

  • 如果你要发布你的作业,至少向我们展示你到目前为止所做的尝试,以及你卡在哪里。
  • 我投票结束这个问题,因为它看起来像一个家庭作业,没有任何尝试解决它。​​
  • dowhileuntil 使用循环,但带块的枚举器不使用。如果您不打算排除后者,您可能希望使用全部大写的句子。我认为整个max 方法家族都是禁止使用的(`max_by、minmax 等)
  • arr = numbers.uniq; (arr-arr.min(arr.size-1)).first #=> 60 怎么样?
  • @CarySwoveland,看看stackoverflow.com/help/on-topic - 特别是第3点。

标签: arrays ruby loops integer


【解决方案1】:

创建另一个变量来存储当前最大值,然后循环遍历数字。

max_num = 0
numbers.each { |n| max_num = n if n > max_num }

【讨论】:

  • 查看@Cappy 的帖子以获取此修订版:)
  • 您和@Cappy 都应该添加max_num 作为第三行,以检索值。
【解决方案2】:

我喜欢用inject 做类似的事情

numbers.inject(0){|acc,n| n > acc ? n : acc}

【讨论】:

    【解决方案3】:

    类似于 philip yoo 的回答,但适用于负数数组。

    max_num = numbers.first 
    numbers.each { |n| max_num = n if n > max_num }
    

    【讨论】:

    • 好收获! max_num 应该设置为数组中的第一个数字而不是 0 :)
    • ...或-Float::INFINITY #=> -Infinity(与-1.0/0相同)。
    【解决方案4】:

    另一个要使用的是 Enumerable reduce

    [-1000000, 10, 20, 30, 40, 50, 100, 60, 80].reduce {|x,y| x > y ? x : y}
    => 100
    

    【讨论】:

    • reduce 优于 @danielrsmith 在他之前的回答中使用的inject
    • reduceinject 做同样的事情(reduce 是 inject 的别名),但是根据Ruby Style Guide,最好使用 reduce。
    • 我意识到这一点。考虑到它与先前的答案重复,我只是不明白您的答案的意义。
    【解决方案5】:

    此代码在for 循环而不是.each 上运行。根据您的问题,我认为您可能需要一个实际的循环构造函数。

    numbers = [10, 20, 30, 40, 50]
    greatest_num = numbers.first
    for n in numbers
        greatest_num = n if n > greatest_num
    end
    p greatest_num
    

    【讨论】:

      【解决方案6】:

      不是循环,但可以使用递归。

      numbers = [10, 20, 30, 40, 60, 50]
      
      def biggest(arr)
        return arr.first if arr.size == 1
        cand = biggest(arr[1..-1])
        arr.first > cand ? arr.first : cand
      end
      
      biggest(numbers) #=> 60
      

      【讨论】:

        【解决方案7】:

        一种更“新手”的方式(因为我是其中之一 :-))两周前开始了 Ruby 之旅

        numbers = [10, 20, 30, 40, 50, 60] # your array
        max_num = numbers[0] # Setting max_num to the first element of your array    
        numbers.size.times{|x| if max_num < numbers[x] then max_num = numbers[x] end} # I use 
         #* the .size method to find how many elements are on your array and the .times method
         #* to iterate "size" "times" over your array.  In the block you have a simple comparison
        puts max_num #displaying the result
        

        所以,更详细一点......数组索引总是从 0 开始。我们从不将零分配给我们的 max_num 变量,因为您的数组可能包含负数。

        numbers.size.times 东西...在 Ruby 中,我们可以对一个对象使用多种方法,在我们的示例中,对象是数组 numbers。所以,numbers.size 将返回 6(记住数组从 0 开始。所以从 0 到 5 等于数组中的 6 个元素)然后我们使用 .times 方法循环块的 6 次。

        在块内部... .times 方法会将 0 到 5 的值传递给变量 x。所以,剩下的就是做一个简单的比较。如果我们的 max_num 小于我们在 x 位置 (numbers[x]) 的 numbers 数组,那么将 numbers[x] 设为我的新 max_num (max_num = numbers[x])。该块将自我重复 6 次 :-)

        代码有效.. 至于解释.. 这就是我理解它的方式... 由于英语不是我的母语,我要求社区评论(好和坏)代码和解释.. .

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-17
          • 2019-09-18
          • 1970-01-01
          • 2017-06-05
          • 1970-01-01
          • 1970-01-01
          • 2022-06-15
          相关资源
          最近更新 更多