Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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在数组中查找条目_Ruby_Arrays_Math - Fatal编程技术网

ruby在数组中查找条目

ruby在数组中查找条目,ruby,arrays,math,Ruby,Arrays,Math,我有一些数组 [0,1,0,1,0] [0,0,1,1,0] [1,1,0,1,1] 还有一些面具 [1,0] [0,1] 我应该使用什么方法按掩码查找序列 样本数组可以是任意大小,掩码也可以是任意大小 我需要一些策略或数学解决方案我不太理解这个问题,但这就是你想要的: a = [0,1,0,1,0] b = [1,0] x = a.each_cons(b.length).map { |i| i == b}.index(true) 您还可以将索引(true)替换为first此问题有助于使用

我有一些数组

[0,1,0,1,0]
[0,0,1,1,0]
[1,1,0,1,1]
还有一些面具

[1,0]
[0,1]
我应该使用什么方法按掩码查找序列

样本数组可以是任意大小,掩码也可以是任意大小


我需要一些策略或数学解决方案

我不太理解这个问题,但这就是你想要的:

a = [0,1,0,1,0]
b = [1,0]
x = a.each_cons(b.length).map { |i| i == b}.index(true)

您还可以将
索引(true)
替换为
first

此问题有助于使用
矩阵
类,尤其是在使用该方法时

对于给定的“主”矩阵和“掩蔽”矩阵,以下方法针对主矩阵的每一行提取子矩阵的所有序列,其中序列中的每个元素等于掩蔽矩阵

代码

require 'matrix'

def find_sequences(arr, mask)
  arr_rows  = arr.size
  arr_cols  = arr.first.size
  @mask_rows  = mask.size
  @mask_cols  = mask.first.size
  m_arr   = Matrix[*arr]
  @m_mask = Matrix[*mask]

  (arr_rows-@mask_rows+1).times.with_object([]) do |i,seq|
    j = 0
    while j <= arr_cols-@mask_cols do
      len = row_sequence(m_arr.minor(i,@mask_rows,j,arr_cols-j))
      if len > 0
        seq << [i,j,len]
        j += len * @mask_cols + 1
      else
        j += 1
      end
    end
  end
end

def row_sequence(msub)
  len = 0
  0.step(by: @mask_cols, to: msub.column_count-@mask_cols) { |j|
    (msub.minor(0,@mask_rows,j,@mask_cols) == @m_mask) ?
      (len += 1) : (return len) }
  len
end
arr =  [[0,1,0,1,0,0,1,0,0],
        [0,0,1,1,0,1,0,1,0],
        [1,0,1,0,1,0,1,0,1],
        [0,1,0,1,0,1,0,1,1],
        [1,0,1,0,1,1,0,1,1]]

mask = [[1,0],
        [0,1]]

find_sequences(arr, mask)
  #=>  row col len
  #   [[0,  1,  1],
  #    [0,  6,  1],
  #    [1,  3,  3],
  #    [2,  0,  4],
  #    [3,  1,  2]]

我想我不明白这个问题。在上面的例子中,输出应该是什么?类似于x=1,y=0在这种情况下,左上角的位置将是一个足够的长度,它对3个元素都很有效
x=a.each_cons(b.length).map do | aa | aa==b end.index(true)
。谢谢你也纠正我。我使用
[I,j]
;-)假设数组始终有2个成员我已经改正了。