【发布时间】:2015-07-10 17:53:05
【问题描述】:
所以我相信我理解这段代码。在 codewars 中提示我返回提供的数组中的重复项。这是我经过一番搜索后得出的结论。我对 Ruby 很陌生,想彻底理解这段代码,而不是仅仅用它来通过代码挑战。
如果我错了,请纠正我,或者添加我遗漏的任何内容......
- arr 是数组。
- .detect 是一种将枚举中的每个条目通过块传递的方法。然后它返回第一个块不为假的。
-
在这种情况下,它通过:
{|e| arr.rindex(e) != arr.index(e)} 这个block的过程是e代表enum中的每一个entry。
- .rindex(e) 在数组中从最后一个到第一个 e 搜索并返回在参数 () 部分中描述的匹配数组对象编码。
- .index(e) 返回数组中第一个为真的对象。
所以,为了总结这一切,“.rindex”从数组的末尾开始检查第一个真正的对象,而 .index 做同样的事情,但从数组的开头直到他们达到了使 .rindex 和 .index 为假的数字。由于块本身为真(arr.rindex(e) 不等于 arr.index(e)),detect 返回的是重复的对象。
arr.detect {|e| arr.rindex(e) != arr.index(e) }
这一切对我来说仍然感觉很高,如果有人能更好地分解它对我来说会是有益的。提前致谢!
【问题讨论】: