如何在Ruby中以不区分大小写的方式获取唯一元素,并考虑nil元素?

时间:2017-02-15 20:56:44

标签: arrays ruby null unique

我正在使用Ruby 2.4。如何以不区分大小写的方式从数组中获取唯一元素但是会占用nil元素?我认为这是解决方案

data.map{|i| i || i.downcase}.uniq

但即使在我完成所有学习之后,我仍然会收到错误

NoMethodError: undefined method `downcase' for nil:NilClass

当teh数组中的一个元素为nil时。

2 个答案:

答案 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}的缩写。