对于挑战,我试图在不使用uniq
的情况下返回数组的唯一值。这就是我到目前为止所做的工作:
def unique
unique_arr = []
input_arr.each do |word|
if word != unique_arr.last
unique_arr.push word
end
end
puts unique_arr
end
input = gets.chomp
input_arr = input.split.sort
input_arr.unique
我的理由是,如果我在使用each
迭代数组之前先对数组进行排序,我可以push
将其更改为unique_arr
而无需重复考虑它是否可以考虑#39} ; sa重复,推送的最后一个值将匹配它。
我是以错误的方式解决这个问题吗?
答案 0 :(得分:4)
是的,你至少犯了两个错误。
// Get documents
var news = DocumentHelper.GetDocuments("CMS.News")
.OnSite("CorporateSite")
.Path("/News", PathTypeEnum.Children)
.Culture("en-us")
.CombineWithDefaultCulture(false);
称为input_arr.unique
作为数组,则必须在input_arr
上定义方法。您的方法体中有Array
,它来自任何地方。input_arr
输出到终端,但使方法返回puts
,这使其行为与nil
不同。可以修改为:
uniq
答案 1 :(得分:3)
这是一个简洁的方法,它没有明确地使用另一个类的功能,但可能会错过挑战的重点:
class Array
def unique
group_by(&:itself).keys
end
end
答案 2 :(得分:3)
一个独特的阵列?这对我来说听起来像Set
:
require 'set'
Set.new([1,2,3,2,3,4]).to_a
#=> [1,2,3,4]
答案 3 :(得分:0)
我尝试了这三个选项。只是为了挑战
class Array
def unique
self.each_with_object({}) { |k, h| h[k] = k }.keys
end
def unique2
self.each_with_object([]) { |k, a| a << k unless a.include?(k) }
end
def unique3
arr = []
self.map { |k| arr << k unless arr.include?(k) }
arr
end
end
答案 4 :(得分:0)
以下是另一种方法:
uniques = a.each.with_object([]) {|el, arr| arr << el if not arr.include?(el)}
答案 5 :(得分:-1)
如果你这样看,那就太容易了:
a = [1,1,2,3,4]
h = Hash.new
a.each{|q| h[q] = q}
h.values
这将返回:
[1, 2, 3, 4]