Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby从多维数组中提取数组_Ruby On Rails_Arrays_Ruby - Fatal编程技术网

Ruby on rails Ruby从多维数组中提取数组

Ruby on rails Ruby从多维数组中提取数组,ruby-on-rails,arrays,ruby,Ruby On Rails,Arrays,Ruby,我有一个多维数组,如: arr1 = [["text1", 1], ["text2", 2], ["    text3", 3], ["    text4", 4], ["text5", 5], ["text6", 6], ["text7", 7]] 还有一个 arr2 = [2,3,6] 我想提取整个数组,如果它包含arr2的元素。因此,结果应该是

我有一个多维数组,如:

arr1 = [["text1", 1], ["text2", 2], ["    text3", 3], ["    text4", 4], ["text5", 5], ["text6", 6], ["text7", 7]]
还有一个

arr2 = [2,3,6]
我想提取整个数组,如果它包含arr2的元素。因此,结果应该是:

arr = [["text2", 2], ["    text3", 3], ["text6", 6]].
我试过很多方法,但都没有结果。例如:

arr1.each { |elem| arr2.each { |x| elem.delete_if{ |u| elem.include?(x) } } }

有人能帮忙吗?

试试这个

arr1.select { |a| a.any? { |item| arr2.include? item } }
 => [["text2", 2], ["    text3", 3], ["text6", 6]] 
试试这个

arr1.select { |a| a.any? { |item| arr2.include? item } }
 => [["text2", 2], ["    text3", 3], ["text6", 6]] 

不是很通用的解决方案-更改整数在数组中的位置将失败,同时更改arr2将使此解决方案无效:P.S.我认识你know@AndreyDeineko我不确定我是否明白。我相信这些元素在arr1中具有id,在arr2中具有id本身。对于arr2等中的非唯一多个值,它也会失败,但对于所述问题,此解决方案足够健壮。不管这些问题是什么,问题/请求是,如果它包含arr2元素,我想提取整个数组,而您的解决方案在输入数据稍有更改的情况下不满足此要求。即使使用提供的示例输入,它也能解决问题。arr1=[[1,text1],[2',text'],[5,text5],[6,text6],[7,text7]],这与您的解决方案一起将导致[],而它将导致[[2,text],[6,text6]]不是非常通用的解决方案-更改整数在数组中的位置将失败,此外,更改arr2也会使此解决方案无效:P.S.我认识你know@AndreyDeineko我不确定我是否明白。我相信这些元素在arr1中具有id,在arr2中具有id本身。对于arr2等中的非唯一多个值,它也会失败,但对于所述问题,此解决方案足够健壮。不管这些问题是什么,问题/请求是,如果它包含arr2元素,我想提取整个数组,而您的解决方案在输入数据稍有更改的情况下不满足此要求。即使使用提供的示例输入,它也能解决问题。arr1=[[1,text1],[2,text'],[5,text5],[6,text6],[7,text7]],您的解决方案将导致[],而它应该导致[[2,text],[6,text6]]为什么不arr1.选择{a | a&arr2.any?}或arr1.查找所有{a | a | a&arr2.any}既然你是在选择/查找东西,而不是更一般的注入/还原?@muistoshort selection肯定比我创建的新数组好,我将编辑我以前没有这样做的答案,因为已经给出了select的解决方案。为什么不arr1.select{a | a&arr2.any}或arr1.find|u all{a | a&arr2.any}既然你是在选择/发现东西,而不是更一般的注入/还原?@muistoshort选择肯定比我创建的新阵列好,我将编辑我以前没有这样做的答案,因为已经给出了带有select的解决方案。我更喜欢这个或接受答案的第一个注释,因为它与代码尝试执行的操作更为明确,我更喜欢接受答案的这个或第一个注释,因为它更清楚地与代码试图做的事情相关,即找到什么。
arr1.inject([]) { |result, array| (array & arr2).any? ? result << array : result }
#=> [["text2", 2], ["&nbsp;&nbsp;&nbsp;&nbsp;text3", 3], ["text6", 6]]
arr1.select { |array| (array & arr2).any? }
arr1.select { |(_, d)| arr2.include? d }