所以我相信我理解这段代码。我在codewars中提示我返回提供的数组中的副本。这是我经过一番搜索后想出来的。我是Ruby的新手,想彻底了解这段代码,而不是仅仅使用它来传递代码挑战。
如果我错了,请纠正我,或者添加我遗失的任何内容......
在这种情况下,它通过:
{|e| arr.rindex(e) != arr.index(e)}
此块的过程是 e 表示枚举中的每个条目。
所以,为了把这一切都包起来,“.rindex”从数组的末尾开始检查第一个真实对象,而 .index 从数组的开头直到他们点击了使 .rindex 和 .index 为false的数字。由于块本身为真(arr.rindex(e)不等于arr.index(e)),因此detect返回重复的对象。
arr.detect {|e| arr.rindex(e) != arr.index(e) }
对我而言,这一切对我来说仍然感觉非常高,如果有人为我打破这一点会更好。提前谢谢!
答案 0 :(得分:2)
你非常接近,但是#index
和#rindex
分别从左边和右边开始返回找到匹配e
的元素的数组索引(位置)。您知道当index和rindex返回的值不匹配时,您发现了重复。例如,给定:
arr = [:a, :b, :b, :c]
arr.index(:b) # => 1
arr.rindex(:b) # => 2
每个条目的数组索引为0, 1, 2, 3
。这里,从左侧搜索,:b
首先在位置2(索引1)处找到,但是从右侧搜索,首先在位置3(索引2)处找到。由于索引不匹配,您知道您发现两个元素具有相同的值,但阵列中的位置不同,因此您有重复。
(除了有趣之外,这种技巧是one of my better-voted SO answers。嘿。)
答案 1 :(得分:1)
不久:
如果索引(e)与rindex(e)不同,则至少有两个包含e的插槽。