如何在Ruby中查找,返回和删除数组中的最大值?

时间:2016-09-07 20:33:15

标签: arrays ruby

我想在整数数组中找到最大值,返回该值,并将其从数组中删除。这有内置功能吗?

对于a = [1,2,3,4],我可以轻松执行a.max,返回4。但是,a[....]保持不变。

4 个答案:

答案 0 :(得分:5)

你可以这样做。

a = [1,2,3,4]
a.delete(a.max)
=> 4
a => [1, 2, 3]

要删除单个实例,如果有重复项,您可以使用类似的内容(根据注释,使用a.index(a.max)获取最大值的索引)

a = [1, 2, 3, 4, 4]
a.delete_at(a.index(a.max))
=> 4
a => [1, 2, 3, 4]

答案 1 :(得分:4)

基准:

require 'fruity'

ARY = (0..99).to_a.shuffle

compare do
  matthewalexander { a = ARY.dup; a.delete_at(a.index(a.max)) }
  sagarpandya82    { a = ARY.dup; a.sort!.pop                 }
end

# >> Running each test 512 times. Test will take about 1 second.
# >> sagarpandya82 is faster than matthewalexander by 10.000000000000009% ± 10.0%

增加ARY的大小会改变结果:

ARY = (0..999_999).to_a.shuffle

compare do
  matthewalexander { a = ARY.dup; a.delete_at(a.index(a.max)) }
  sagarpandya82    { a = ARY.dup; a.sort!.pop                 }
end

# >> Running each test once. Test will take about 5 seconds.
# >> matthewalexander is faster than sagarpandya82 by 3x ± 0.1

根据您的需要使用适当的方法。如果您不知道阵列的大小,我建议假设您的数据会增长,因为它们与小阵列非常接近。

答案 2 :(得分:2)

这应该可以解决问题:

a.sort!.pop #=> 4

答案 3 :(得分:0)

这有效:

        var numbers = [];

        var vals = $('.myelement').each(function(i,v){

            var str = $(this).html();               
            var chars = str.split("");

            $.each(chars, function(i,v){
                if($.isNumeric(v)) numbers.push(v); 
            });
        });