我想得到这样的东西:
a = [0,1,0,0,1,0,1,0]
a.except(1) # => [0,0,0,1,0,1,0]
a # => [0,1,0,0,1,0,1,0]
a.except(1).except(1) # => [0,0,0,0,1,0]
如您所见,a
的第一个元素等于except
的参数已从a
中删除。
我能做到:
tmp_a = a.dup
tmp_a.delete_at(a.index(1))
tmp_a
但在我看来,它看起来像嗅觉。有更优雅的单线解决方案吗? (换句话说 - 如何定义方法"除了"对于数组?)
UPD
我解决了这个问题所以
class Array
def except(elem)
dup.tap{|a| a.delete_at(a.index(elem))}
end
end
你觉得怎么样?
答案 0 :(得分:2)
你的解决方案有什么“hacky”?
这也是我第一次想到的东西(在阅读整个问题之前开始乱砍:P)
class Array
def except(elem)
tmp = self.dup
tmp.delete_at(self.index(elem))
tmp
end
end
或者你可以使用delete_if
的力量(包括我从@mudasobwa的回答中偷走的count
:
class Array
def except(elem, count = 1)
tmp = self.dup
memo = 0
tmp.delete_if { |e| elem == e && (memo += 1) <= count }
end
end
或者您可以将slice
数组添加到位:
class Array
def except(elem)
index = self.index(elem)
self.slice(0, index) + self.slice(index + 1, self.length)
end
end
答案 1 :(得分:1)
class Array
def except what, count = 1
memo = 0
map do |e|
what == e && (memo += 1) <= count ? nil : e
end.compact
end
end
以上内容将移除count
what
a.except(1, 2)
#⇒ [0,0,0,0,1,0]
的出现次数{/ 1}}
DoCmd.RunSQL "INSERT INTO [myTable] ([Last Date])
VALUES (" & Format(currDateTime, "\#yyyy-mm-dd hh:nn:ss\#") & ")"
答案 2 :(得分:1)