似乎无法弄清楚这一点。请帮助我理解此代码请求的a
变量以及预期输出的内容。提前谢谢!
def function_name(a)
a.inject({}){ |a,b| a[b] = a[b].to_i + 1; a}.\
reject{ |a,b| b == 1 }.keys
end
答案 0 :(得分:3)
假设a
是一个数组,
该函数首先计算键的出现次数。
a = ['a', 'b', 'c', 'b']
a.inject({}) { |a,b|
# a: a result hash, this is initially an empty hash (`{}` passed to inject)
# b: each element of the array.
a[b] = a[b].to_i + 1 # Increase count of the item
a # The return value of this block is used as `a` argument of the block
# in the next iteration.
}
# => {"a"=>1, "b"=>2, "c"=>1}
然后,它会过滤多次出现的项目:
...reject{ |a,b|
# a: key of the hash entry, b: value of the hash entry (count)
b == 1 # entry that match this condition (occurred only once) is filtered out.
}.keys
# => ["b"]
因此,应使用get_duplicated_items
等函数名称代替function_name
来更好地描述目的。
答案 1 :(得分:1)
它希望a成为一个数组,但是数组的构成并不重要,所以你需要一些其他的线索才能知道数组中应该是什么。
代码的作用是相当直接的前言。对于数组中的每个项目,它将其用作哈希中的键。然后它基本上计算它看到该键的次数。最后,它删除了只出现过一次的所有项目。
它返回数组a
中显示2次或更多次的唯一项。