我正在使用Ruby 2.4。如何以不区分大小写的方式从数组中获取唯一元素但是会占用nil元素?我认为这是解决方案
data.map{|i| i || i.downcase}.uniq
但即使在我完成所有学习之后,我仍然会收到错误
NoMethodError: undefined method `downcase' for nil:NilClass
当teh数组中的一个元素为nil时。
答案 0 :(得分:2)
按照您的方式执行操作,您只需将<form name="someform" action="somepage.php" method="post">
<input name="length" id="length" type="number" min="1" oninput="validate()"/>
<input type="submit" id="submit" value="submit" />
</form>
更改为||
即可。当元素为零时,&&
没有做任何事情。
或者,您可以使用||
使其更漂亮。此外,您可以通过将块传递给&.
来缩短整个内容。
uniq
除非结果也必须降级,在这种情况下你仍然需要地图:
data.uniq { |datum| datum&.downcase }
答案 1 :(得分:1)
您的问题是您希望以不区分大小写的方式使用唯一元素。 @ Glyoko的回答就是这样。
如果您希望所有元素都转换为小写(或大写),那与您提出的要素不同。
如果data.map(&:downcase).uniq
的所有元素均为data
, downcase
将有效。否则,您将获得NoMethodError
个。
你可以消除这样的非downcase
能力元素:
data.select{|item| item.respond_to? :downcase}.map(&:downcase).uniq
虽然如果唯一的非downcase
能力元素是nil
s,您可以先通过compact
数组来消除这些元素:
data.compact.map(&:downcase).uniq
请注意,ary.map(&:foo)
是ary.map {|item| item.foo}
的缩写。