当前位置:  开发笔记 > 后端 > 正文

找到阵列是否是2d阵列的简单方法?

如何解决《找到阵列是否是2d阵列的简单方法?》经验,为你挑选了1个好方法。

有一个更好的替代方法来查找数组是否为2d数组.

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

有任何想法吗?



1> Cary Swovela..:

我假设通过"2d数组"(在Ruby中没有任何意义),OP想要确定数组的每个元素是否都是一个数组,并且所有这些元素数组都是相同的大小,就像" 2d矩阵".

编辑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按照他的建议删除了.]

我假设"2D数组"是一个数组,其元素是相同大小的数组.

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

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有