我有一个数组,里面有很多数组 (2d)(在这个例子中有四个数组):
[
[13, 15, 18, 23, 23, 11, 14, 19, 19, 5, 10, 10, 8, 8],
[8, 15, 19, 21, 21, 12, 16, 18, 18, 11, 13, 13, 6, 6],
[9, 15, 21, 23, 23, 7, 13, 15, 15, 12, 14, 14, 8, 8],
[2, 8, 14, 16, 16, 7, 13, 15, 15, 12, 14, 14, 8, 8]
]
我需要查找这些数组中的任何一个上的任何元素是否与其他数组中的元素相同且索引相同。我需要获取所有这些数字及其索引。
例如。 First_array[1] = 15,以及 second_array[1] = 15 和 third_array[1] = 15。所以我需要这些,以及它们的索引。
此外,所有需要的值都必须来自数组左侧或右侧的数组。对于前。 - array_one[3] = 23、array_two[3] = 21 和 array_three[3] = 23。我不需要这些,因为 array_two 具有不同的值,它将 array_one 与 array_three 分开。
我能得到的是数组的长度(它们的长度都相同)和数组的数量,作为变量。
我希望你明白我的意思:)
看来我离目标又近了一点。看起来这对第二个数组检查得很好(所以只检查了两个第一个数组,但如果这样做了,剩下的应该容易得多)。不要评判我,只评判代码 :D 我知道它很丑,它只是一个原型(prototype):
array.each do |c|
c.each do |v|
c.each_with_index do |k, i|
next_array = array[i + 1]
if next_array.include? v
its_index = next_array.index(v)
if c.index(v) == its_index
p v
end
end
break
end
end
return
end
最佳答案
arr = [[13, 15, 18, 23, 23, 11, 14, 19, 19, 5, 10, 10, 8, 8],
[ 8, 15, 19, 21, 23, 12, 16, 18, 19, 11, 13, 13, 6, 8],
[ 9, 15, 21, 23, 16, 12, 13, 15, 15, 12, 14, 14, 8, 8],
[ 2, 8, 14, 21, 16, 7, 13, 15, 15, 12, 14, 14, 8, 8]]
我在几个地方修改了 arr
。
arr.transpose.each_with_index.with_object({}) do |(col,j),h|
i = 0
h[j] = col.chunk(&:itself).each_with_object({}) do |(x,arr),g|
count = arr.size
g.update(i=>{ value: x, number: count }) if count > 1
i += count
end
end
#=> {0=>{},
# 1=>{0=>{:value=>15, :number=>3}},
# 2=>{},
# 3=>{},
# 4=>{0=>{:value=>23, :number=>2}, 2=>{:value=>16, :number=>2}},
# 5=>{1=>{:value=>12, :number=>2}}
# 6=>{2=>{:value=>13, :number=>2}},
# 7=>{2=>{:value=>15, :number=>2}},
# 8=>{0=>{:value=>19, :number=>2}, 2=>{:value=>15, :number=>2}},
# 9=>{2=>{:value=>12, :number=>2}},
# 10=>{2=>{:value=>14, :number=>2}},
# 11=>{2=>{:value=>14, :number=>2}},
# 12=>{2=>{:value=> 8, :number=>2}},
# 13=>{0=>{:value=> 8, :number=>4}}}
这个散列的键是 arr
列的索引。这些值是包含至少出现两次的所有垂直相邻元素的位置和计数的哈希值。索引 0
、2
和 3
处的列是唯一不包含垂直相邻重复值的列。索引 1
处的列包含 3
15
从行索引 0
开始;索引 4
处的列包含 2
23
,从行索引 0
和 2
16
,从行索引 2
开始。
关于arrays - Ruby 在多维数组中搜索相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43191030/