Arrays Ruby:如果2d数组中的条目不等于特定的1d数组,则从该数组中删除该条目

Arrays Ruby:如果2d数组中的条目不等于特定的1d数组,则从该数组中删除该条目,arrays,ruby,multidimensional-array,Arrays,Ruby,Multidimensional Array,我在理解Ruby中某些代码的行为时遇到了一些问题。我想将二维数组的内容与特定的一维数组相匹配 s = [1,2,3].repeated_permutation(2).to_a solution = [3,1] s.each do |x| if x != solution puts s.length print "#{x}\n" s.delete(x) end end 我不明白的是,这段代码将返回以下内容: s = [[1, 2],

我在理解Ruby中某些代码的行为时遇到了一些问题。我想将二维数组的内容与特定的一维数组相匹配

s = [1,2,3].repeated_permutation(2).to_a
solution = [3,1]
s.each do |x|
    if x != solution
        puts s.length
        print "#{x}\n"
        s.delete(x)
    end
end
我不明白的是,这段代码将返回以下内容:

s = [[1, 2], [2, 1], [2, 3], [3, 1], [3, 3]]
我是一个初学者,我一定忽略了一些基本的东西。 我确实以一种肯定不理想的方式绕过了这个问题:

s = [1,2,3].repeated_permutation(2).to_a
solution = [3,1]

s.each_with_index do |x,idx|
    if x != solution 
        s[idx] = nil
    end
end

=> [nil,nil,nil,nil,nil,nil,nil,[3,1],nil]

s.flatten!.compact!

=> [3,1]
有人能告诉我什么是执行此检查的好方法吗? 提前感谢

查看该方法,该方法可用于根据对块的评估从数组中选择值。例如:

s.select { |arry| arry == solution } 
这将返回一个数组,其中包含
s
中与
解决方案
数组匹配的元素,例如
[[3,1]]

查看该方法,该方法可用于根据对块的求值从数组中选择值。例如:

s.select { |arry| arry == solution } 

这将返回一个数组,其中包含
s
中与
解决方案
数组匹配的元素,例如
[[3,1]]

您要查找的实际上是:


代码返回整个数组的原因是
Enumerable#每个
迭代器返回接收器本身。不建议在枚举过程中更改枚举项,这可能会导致不可预测/意外的结果<代码>当底层阵列发生更改时,每个都会让人抓狂。

您要查找的实际上是:


代码返回整个数组的原因是
Enumerable#每个
迭代器返回接收器本身。不建议在枚举过程中更改枚举项,这可能会导致不可预测/意外的结果<当底层数组被更改时,每个都会变得疯狂。

每个
都从
s
中删除元素,从原始9中删除4个元素,留下长度为5的
s
每个
都从
s
中删除元素,从原始9中删除4个元素,留下长度为5的
s