我想在整数数组中找到最大值,返回该值,并将其从数组中删除。这有内置功能吗?
对于a = [1,2,3,4]
,我可以轻松执行a.max
,返回4
。但是,a[....]
保持不变。
答案 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);
});
});