arrays - 比较两个 ruby 数组并返回相似的项目
问题描述
我有两个数组:
array1 = ["hello friend", "goodbye enemy", "yolo", "jello"]
array2 = ["ello", "random"]
我需要编写一个方法,该方法返回 array1 中元素的数组,这些元素包含在字符串项中,array2 中的任何项。所以该方法应该返回:
["hello friend", "jello"]
我试过array1.reject{|i| array1.include? array2}
了,但它只返回array1。我该怎么办?
解决方案
您走在正确的轨道上,但缺少一些基础知识。
- #reject 选择那些不满足阻塞条件的元素
- 您的块条件正在测试 array1 的元素是否与整个 array2 数组匹配 - 因为字符串和数组永远不会匹配,所以 array1 的所有元素都未通过测试,因此被返回。
展开它,你有这些测试:
"hello friend" == ["ello", "random"] # => false
"goodbye enemy" == ["ello", "random"] # => false
# etc
假设您想要 array1 中的所有元素,其中 array2 中的任何元素都是子字符串:
array1.select do |i|
array2.any? {|j| i.include?(j) }
end
这意味着“从array1 中选择所有元素,其中array2 中的任何元素都是array1 元素的子字符串”。
展开后,这将为您提供以下测试:
"hello friend".include?("ello") # => true
"hello friend".include?("random") # => false
"goodbye enemy".include?("ello") # => false
"goodbye enemy".include?("random") # => false
# etc
#any?
如果 Enumerable 中的任何元素与块条件匹配,则返回 true,因此展开:
["ello", "random"].any? {|i| "hello friend".include?(i) } # => true
["ello", "random"].any? {|i| "goodbye enemy".include?(i) } # => false
由于#select
返回那些块条件为真的元素,“你好朋友”将被返回,而“再见敌人”则不会。
推荐阅读
- php - PHP定义的奇怪行为()
- python - 需要显示没有提交按钮的多个表单内的输入
- hive - 将具有当前时间戳的列添加到 Hive 中的表
- web-scraping - 如何链接两个 Apify 演员?
- python - 如何返回烧瓶中自我模型的所有元素的列表?
- java - ResultSet getDate() 返回不正确和正确的日期
- ruby-on-rails - 设计注册一个用户注册,但需要两个不同的注册路径
- c - Eclipse 显示仅声明一次的多重声明错误
- sql - 如何在 ingres/vectorwise 中制作 RANK() 或 ROW_NUMBER() ?发出sql代码
- html - 如何使用 MJML 实现电子邮件内导航?