arrays - Ruby 在多维数组中搜索相同的值

标签 arrays ruby find

我有一个数组,里面有很多数组 (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] = 15third_array[1] = 15。所以我需要这些,以及它们的索引。

此外,所有需要的值都必须来自数组左侧或右侧的数组。对于前。 - array_one[3] = 23array_two[3] = 21array_three[3] = 23。我不需要这些,因为 array_two 具有不同的值,它将 array_onearray_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 列的索引。这些值是包含至少出现两次的所有垂直相邻元素的位置和计数的哈希值。索引 023 处的列是唯一不包含垂直相邻重复值的列。索引 1 处的列包含 3 15 从行索引 0 开始;索引 4 处的列包含 2 23,从行索引 02 16,从行索引 2 开始。

关于arrays - Ruby 在多维数组中搜索相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43191030/

相关文章:

ruby-on-rails - 如何用假数据填充数据库?

ruby-on-rails - 缺少请求格式 : text/html 的模板

emacs - 不要在 Emacs 完成窗口中显示无趣的文件

c - 想要打印给定数组中具有相同数字的数组元素,例如 2222、11、888888 等。 {1, 121,222,44,451,5510,414}

c++ - 数组索引到矩阵索引

java - Toast 数组值不起作用

html - 在 Ruby 中获取页面上所有 href 内容的最简单方法?

Linux:使用 grep 在文件中查找单词,然后打印文件中是否包含该单词

c# - 如何搜索包含 2 个特定字符串的所有文件?

javascript - 在 LocalStorage 中构建数组