gpt4 book ai didi

ruby - 以这种方式使用 Array#reduce 如何工作?

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

过去几周我一直在学习 ruby​​,我遇到了类似这样的事情:

array = [10, 20, 20];

array.reduce(:^)

# => 10

评估为 10。

该代码的目的是在序列中找到出现次数为奇数的元素,例如 [10, 20, 20]

有没有人对它的工作原理有一个相对简单的解释?

最佳答案

array = [10, 20, 20];

array.reduce(:^)
#=> 10

产生与

相同的结果
array.reduce { |t,n| t^n }
#=> 10

让我们添加一个 puts 语句看看发生了什么。

array.reduce do |t,n|
puts "t = #{t}, n = #{n}, t^n = #{t^n}"
t^n
end
# t = 10, n = 20, t^n = 30
# t = 30, n = 20, t^n = 10
#=> 10

Enumerable#reduce没有给出参数“备忘录”( block 变量t)被设置为等于接收器的第一个元素(10)和传递给 block 的第一个元素是接收器的第二个元素,20

Fixnum#^bitwise "exclusive-or"运算符(异或)。

t #=> 10 和(第一个)n #=> 20 被传递给 block 时:

t^n #=> 30

因为

10.to_s(2)      #=> "01010" 
20.to_s(2) #=> "10100"
-----
(10^20).to_s(2) #=> "11110"
"11110".to_i(2) #=> 30
10^20 #=> 30

t #=> 30 和(第二个)n #=> 20 传递给 block 时:

t^n #=> 10

因为

30.to_s(2)      #=> "11110" 
20.to_s(2) #=> "10100"
-----
(30^20).to_s(2) #=> "01010"
"1010".to_i(2) #=> 10
(30^20) #=> 10

关于ruby - 以这种方式使用 Array#reduce 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40824161/

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