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个成员我已经改正了。