ruby - 查找数组是否为二维数组的简单方法?

标签 ruby

有一个更好的替代方法来判断数组是否为二维数组。

my_array = [["a", "b"],["c", "d"],["e", "f"]]
!my_array.map{|element| element.is_a? Array}.include? false

有什么想法吗?

最佳答案

我假设通过“二维数组”(在 Ruby 中没有意义),OP 想要确定数组的每个元素是否都是一个数组,并且所有这些元素数组的大小都相同,就像这种情况一样带有“二维矩阵”。

编辑 2:这是另一种方式(比我下面的原始答案好得多!):

def all_elements_arrays_of_same_size?(a)
  !!(a.transpose rescue nil)
end

all_elements_arrays_of_same_size? [["a", "b"],["c", "d"],["e", "f"]]
  #=> true 
all_elements_arrays_of_same_size? [["a", "b"],["c", "d", "g"],["e", "f"]]
  #=> false 
all_elements_arrays_of_same_size? [["a", "b"],"c",["e", "f"]]
  #=> false
all_elements_arrays_of_same_size? [["a", "b"],"c", {a:1}]
  #=> false
all_elements_arrays_of_same_size? [[1,2,3,4,5,6,7,8], 1]
  #=> false

编辑 1:@WandMaker 提出了一个非常好的观点 [关于我下面的原始答案]。以前我有 a.map(&:size).minmax.uniq.size。我按照他的建议删除了 minimax。]

我假设“二维数组”是一个数组,其元素是相同大小的数组。

def all_elements_arrays_of_same_size?(a)
  a.all? { |e| e.class==Array } && a.map(&:size).uniq.size == 1
end

all_elements_arrays_of_same_size? [["a", "b"],["c", "d"],["e", "f"]]
  #=> true 
all_elements_arrays_of_same_size? [["a", "b"],["c", "d", "g"],["e", "f"]]
  #=> false 
all_elements_arrays_of_same_size? [["a", "b"],"c",["e", "f"]]
  #=> false
all_elements_arrays_of_same_size? [["a", "b"],"c", {a:1}]
  #=> false
all_elements_arrays_of_same_size? [[1,2,3,4,5,6,7,8], 1]
  #=> false

对于最后一个示例,请注意 [1,2,3,4,5,6,7,8].size #=> 81.size #=> 8

步骤如下:

对于:

array = [["a", "b"],["c", "d"],["e", "f"]]

array.all? { |e| e.class==Array }
  #=> true 
a = array.map(&:size)
  #=> [2, 2, 2] 
b = a.uniq
  #=> [2] 
b.size == 1
  #=> true 

另一方面,对于:

array = [["a", "b"],["c", "d", "g"],["e", "f"]]

array.all? { |e| e.class==Array }
  #=> true 
a = array.map(&:size)
  #=> [2, 3, 2] 
b = a.uniq
  #=> [2, 3] 
b.size == 1
  #=> false

对于:

array = [["a", "b"],"c", {a:1}]

array.all? { |e| e.class==Array }
  #=> false

关于ruby - 查找数组是否为二维数组的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34172303/

相关文章:

ruby - IRB 中控制结构和 block 内的显式 "return"给出 "unexpected return"

ruby - 在 Chrome 中运行 headless 模式时将文件下载到路径

javascript - 在 session 中传递所选国家/地区(下拉列表)的值,然后重新加载当前页面(Rails 4)

jquery - Rails 3 使用链接呈现不同的部分

ruby - 有向无环图中的循环检测更快?

ruby-on-rails - 无效的多字节字符 (US-ASCII) 错误

ruby - 如何在ruby+Cucumber2.0中添加等待方法等待特定元素加载完毕

ruby-on-rails - 如何将行数组渲染到 <textarea>?

ruby-on-rails - rails : how to set json format for redirect_to

ruby - 我如何在 Rake 中获取当前命名空间?