返回数组中第二高的值 - ruby
returning the second highest value in an array - ruby
我有一个函数接收字符串 a returns 第二大值。
例如,如果输入是“abc123”,则 returning 值为 2。
这工作正常。
但是我想更改函数,以便如果只找到一个或没有找到整数..我想 return -1.
例如,如果输入 = "abc1",return 值应该 = -1
此输入的当前 returning 值为 0。
这是我的函数
def function(input)
input.split("").map { |x| x.to_i }.sort[-2]
end
任何帮助都会很棒!
您可以先使用#scan
方法来select 整数。如果整数的大小将小于两个 — [-2]
returns nil,因此您可以使用 ||
来传递您的默认值。
def function(input)
input.scan(/\d/).map(&:to_i).sort[-2] || -1
end
def second_largest(str)
(str.gsub(/\d/).max(2)[1] || -1).to_i
end
second_largest("ab42de61f") #=> 4
second_largest("ab63f") #=> 3
second_largest("a6b25f") #=> 5
second_largest("ab1def") #=> -1
second_largest("abcdef") #=> -1
如果
str = "ab42de61f"
然后
enum = str.gsub(/\d/)
#=> #<Enumerator: "ab42de61f":gsub(/\d/)>
as String#gsub returns 是一个枚举器,当它被调用时只有一个参数且没有块。在这种形式下,它不再与字符替换有任何关系。它只是枚举其参数的匹配项。
我们可以通过将此枚举器转换为数组来查看将生成的元素:
enum.to_a
#=> ["4", "2", "6", "1"]
继续,
arr = enum.max(2)
#=> ["6", "4"]
当字符串包含很多数字并且只需要两个最大的数字时,使用 Enumerable#max 显然比对所有数字排序更有效(O(n) vs O(nlog(n)),其中n
是位数。
接下来,
s = arr[1] || -1
#=> "4" || -1 => "4"
最后
s.to_i
#=> 4
同样,
"ab1def".gsub(/\d/).max(2) #=> ["1"]
"abcdef".gsub(/\d/).max(2) #=> []
解释了最后两个示例的 return 值 (-1
)1.
1.请注意 -1.to_i #=> -1
.
我有一个函数接收字符串 a returns 第二大值。
例如,如果输入是“abc123”,则 returning 值为 2。 这工作正常。
但是我想更改函数,以便如果只找到一个或没有找到整数..我想 return -1.
例如,如果输入 = "abc1",return 值应该 = -1 此输入的当前 returning 值为 0。
这是我的函数
def function(input)
input.split("").map { |x| x.to_i }.sort[-2]
end
任何帮助都会很棒!
您可以先使用#scan
方法来select 整数。如果整数的大小将小于两个 — [-2]
returns nil,因此您可以使用 ||
来传递您的默认值。
def function(input)
input.scan(/\d/).map(&:to_i).sort[-2] || -1
end
def second_largest(str)
(str.gsub(/\d/).max(2)[1] || -1).to_i
end
second_largest("ab42de61f") #=> 4
second_largest("ab63f") #=> 3
second_largest("a6b25f") #=> 5
second_largest("ab1def") #=> -1
second_largest("abcdef") #=> -1
如果
str = "ab42de61f"
然后
enum = str.gsub(/\d/)
#=> #<Enumerator: "ab42de61f":gsub(/\d/)>
as String#gsub returns 是一个枚举器,当它被调用时只有一个参数且没有块。在这种形式下,它不再与字符替换有任何关系。它只是枚举其参数的匹配项。
我们可以通过将此枚举器转换为数组来查看将生成的元素:
enum.to_a
#=> ["4", "2", "6", "1"]
继续,
arr = enum.max(2)
#=> ["6", "4"]
当字符串包含很多数字并且只需要两个最大的数字时,使用 Enumerable#max 显然比对所有数字排序更有效(O(n) vs O(nlog(n)),其中n
是位数。
接下来,
s = arr[1] || -1
#=> "4" || -1 => "4"
最后
s.to_i
#=> 4
同样,
"ab1def".gsub(/\d/).max(2) #=> ["1"]
"abcdef".gsub(/\d/).max(2) #=> []
解释了最后两个示例的 return 值 (-1
)1.
1.请注意 -1.to_i #=> -1
.