首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回红宝石中的相交数组并保留上/小写?

如何返回红宝石中的相交数组并保留上/小写?
EN

Stack Overflow用户
提问于 2016-09-21 18:58:21
回答 4查看 37关注 0票数 1

我想要创建一个函数,返回另一个数组列表中包含的数组列表。这就是我想出来的:

代码语言:javascript
复制
def coffee(arr)
  acceptable_coffee = ["dark", "blend", "handsome"]
  good_coffee = acceptable_coffee & arr.map{|n| n.downcase}
end

可能的输入可能包含acceptable_coffee.Their大小写中的元素,但不一定是小写的,即:

代码语言:javascript
复制
arr1 = ["dark", "decaf", "java", "HANDSOME"]
arr2 = ["dark", "smooth", "BLEND"]

我希望函数返回包含可接受元素的数组,同时保留它们的上下大小写。那么,函数应该返回:

代码语言:javascript
复制
coffee(arr1) #=> ["dark", "HANDSOME"]
coffee(arr2) #=> ["dark", "BLEND"]

目前,它分别返回["dark", "handsome"]["dark", "blend"]。如果我不把它放下来,它就不能正常相交了。如何在保留上下大小写的同时返回相交数组?别担心其他边缘案件。假设可能的数组输入的元素是完全超感知的/完全低精度的,如本例所示。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-21 19:02:26

这将得到交集,但id并不完全使用时髦的&运算符或集合。

代码语言:javascript
复制
def coffee(rest)
  acceptable_coffee = ["dark", "blend", "handsome"]
  rest.select { |name| acceptable_coffee.include? name.downcase }
end
票数 3
EN

Stack Overflow用户

发布于 2016-09-21 19:37:41

这不是最漂亮的方法,但您可以这样做,以保留大写。

代码语言:javascript
复制
def coffee(arr)
  acceptable_coffee = ["dark", "blend", "handsome"]
  good_coffee = (acceptable_coffee & arr) + (arr & acceptable_coffee.map(&:upcase))
end

coffee(arr1) #=> ["dark", "HANDSOME"]
coffee(arr2) #=> ["dark", "BLEND"]
票数 0
EN

Stack Overflow用户

发布于 2016-09-21 19:53:09

代码语言:javascript
复制
def coffee(arr, acceptable)
  r = /#{acceptable.join('|')}/i
  arr.select { |s| s =~ r }
end

acceptable = ["dark", "blend", "handsome"]

coffee ["dark", "decaf", "java", "HANDSOME"], acceptable
  #=> ["dark", "HANDSOME"] 
coffee ["dark", "smooth", "BLEND"], acceptable
  #=> ["dark", "BLEND"] 

备注

代码语言:javascript
复制
r = /#{acceptable.join('|')}/i
  #=> /dark|blend|handsome/i
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39624480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档