【发布时间】:2015-03-05 22:23:25
【问题描述】:
我的编码练习的目的是在不使用uniq 方法的情况下去除数组中的重复项。这是我的代码:
numbers = [1, 4, 2, 4, 3, 1, 5]
def my_uniq(array)
sorted = array.sort
count = 1
while count <= sorted.length
while true
sorted.delete_if {|i| i = i + count}
count += 1
end
end
return sorted
end
- 当我运行它时,我得到一个无限循环。怎么了?
- 我可以像使用
count那样使用delete吗? - 它将如何执行?在方法迭代到下一个索引之前,
count会一直持续到数组末尾吗? - 我用
each或map做了这个,得到了相同的结果。使用each、delete_if、map或while循环(第二个循环与第一个循环比较)的最佳方法是什么?
【问题讨论】:
-
我不确定你为什么有 2 个 while 循环。内部循环是无限的,因为
while count <= sorted.length永远不会被查看。 -
您的问题已得到解答。这是另一种方式:
numbers.each_with_object({}) { |n,h| h.update(n=>:anything) }.keys #=>[1, 4, 2, 3, 5]。这需要 Ruby v1.9+,它将哈希键保持在插入顺序中。它依赖于哈希具有唯一键这一事实。 -
感谢您的编辑 Cary。我是 SO 新手,正在学习“正确”的提问方式。我会尽量减少措辞;)也感谢您的回答。
-
您的方法不是最好的,因为数组的大小在变化,但您不断增加索引
count。此外,sorted.delete_if {|i| i = i + count}中的块是指索引,但您可以比较值。 -
这完全回答了我的一些担忧,但不确定! (我也知道'='应该是'==')。谢谢卡里!
标签: ruby