gpt4 book ai didi

ruby - 如何使用循环执行变量赋值,然后中断?

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:46 25 4
gpt4 key购买 nike

逻辑是这样的:

y = 'var to check for'

some_var = some_loop.each do |x|
x if x == y
break if x
end

有没有更好的写法?

有点像

x && break if x == y

提前致谢!

最佳答案

正确答案是使用 include?。例如:

found = (array_expression).include? {|x| x == search_value}

也可以使用 each 并在第一个匹配值处跳出,但是 include? 的 C 实现比使用 each 的 ruby​​ 脚本更快

这是一个测试程序,比较了在非常大的数组上调用 include? 与在同一数组上使用相同参数调用 each 的性能。

#!/usr/bin/env ruby
#
require 'benchmark'

def f_include a, b
b if a.include?(b)
end

def f_each_break a, b
a.each {|x| return b if x == b }
nil
end

# gen large array of random numbers
a = (1..100000).map{|x| rand 1000000}

# now select 1000 random numbers in the set
nums = (1..1000).map{|x| a[rand a.size]}

# now, check the time for f1 vs. f2
r1 = r2 = nil

Benchmark.bm do |bm|
bm.report('incl') { r1 = nums.map {|n| f_include a,n} }
bm.report('each') { r2 = nums.map {|n| f_each_break a,n} }
end
if r1.size != r2.size || r1 != r2
puts "results differ"
puts "r1.size = #{r1.size}"
puts "r2.size = #{r2.size}"
exceptions = (0..r1.size).select {|x| x if r1[x] != r2[x]}.compact
puts "There were #{exceptions.size} exceptions"
else
puts "results ok"
end

exit

这是测试的输出:

$ ./test-find.rb
user system total real
incl 5.150000 0.090000 5.240000 ( 7.410580)
each 7.400000 0.140000 7.540000 ( 9.269962)
results ok

关于ruby - 如何使用循环执行变量赋值,然后中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25579687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com