当前位置: 首页 > 知识库问答 >
问题:

比较两个ruby数组并返回相似的项目

濮阳鸿祯
2023-03-14

我有两个数组:

array1 = ["hello friend", "goodbye enemy", "yolo", "jello"]
array2 = ["ello", "random"]

我需要编写一个方法,该方法返回array1中元素的数组,该数组在字符串项中包含array2中的任何项。因此该方法应该返回:

["hello friend", "jello"]

我尝试了array1.reject{|I|array.include?array2},但它只返回array1。我该怎么办?

共有2个答案

拓拔霄
2023-03-14
array1 = ["hello friend", "goodbye enemy", "yolo", "jello", "Randomize"]
array2 = ["ello", "random"]

r = Regexp.new(Regexp.union(array2).source, 'i')
  #=> /ello|random/i  
array1.grep(r)
  #=> ["hello friend", "jello", "Randomize"] 

请参见Regexp::new、Regexp::union、Regexp#source和Enumerable # grep。

汪志业
2023-03-14

你在正确的轨道上,但是错过了一些基本原则。

    < li>#reject选择那些不满足阻止条件的元素 < li >您的阻塞条件是测试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?如果枚举中的任何元素与块条件匹配,则返回 true,因此展开:

["ello", "random"].any? {|i| "hello friend".include?(i) } # => true
["ello", "random"].any? {|i| "goodbye enemy".include?(i) } # => false

由于#select返回那些块条件为真的元素,因此将返回“hello friend”,而“再见敌人”则不会。

 类似资料:
  • 我怎样才能比较这两个数组,以一种我想返回另一个数组的方式,它包含B中的所有a的值? 返回数组: 来自答案的C#代码:

  • 在这两行中都输出。它们是相同的东西,所以输出的不应该是吗?

  • 问题内容: 如果它具有另一个数组的元素,是否还有其他更好的方法可以从一个数组中删除重复项呢,它工作得很好。 问题答案: 或者,随着ES6的推出:

  • 问题内容: 我有两个简单的表:(这里只有“ id”列) 表格1: 表2: sql查询应比较两个表中table2中缺少的“ id”并返回:1,2 有任何想法吗?:) TY 问题答案: 有几种方法可以给这只猫蒙皮: 或者,您可以使用左外部联接:

  • 问题内容: 我想获取两个列表并查找两个列表中都出现的值。 [5]例如,将返回。 问题答案: 使用,它快速且可读。

  • 问题内容: 比较两个数组并返回差值的最快/最佳方法是什么?非常类似于PHP。有一个简单的功能,还是我必须创建一个via ?还是循环? 问题答案: 如果您希望在JQuery中做到这一点,希望对您有所帮助。 最后的警报提示不常见元素数组Array,即2个数组之间的差。 请让我知道我是否错过了任何事情,干杯! 码