繁体   English   中英

将一个二维数组转换为两个一维数组

[英]Convert ONE two-dimensional array into TWO one-dimensional arrays

您可能对我要问的事情感到很奇怪,但是的确,将1 two-dimensional array转换为2个 one-dimensional arrays

这是我的老师问的,他说他将为回答这个(我认为是棘手的)问题的人提供一个完美的答案。 我很乐意将任何二维或n维数组转换为一个一维数组。 但是他说2,所以我认为第二个数组一定有关系。 而且,他没有告诉您什么类型的数组(int,String或object),因此我认为必须使用任何一种二维数组来完成。

如果没有人知道他想要什么,这就是我要回答的问题:转换为一维数组,并保留第二个null(或使其不包含任何元素)。 但是对于这样一个棘手的问题,我认为这不是一个很好的答案。

编辑:这是我的老师的问题,文字的字(他只是要求在语音会议结束时,而不是在教科书,作为奖金的问题(与...一个不错的奖金奖励)):给定一个 2-dimensional array ,将其转换成两个 1-dimensional array秒。

我不知道Java和C#中的[] []是否考虑2-dimensional array ,但是C#确实具有[,],即二维数组。 我们正在研究没有目标IDE或语言的计算机算法。

EDIT2:我给他发了电子邮件,他拒绝提供其他信息(他说如果我比他们有更多信息,对其他人不公平),并且他没有对锯齿状阵列的想法发表任何评论。 他的回答中唯一有用的东西:让[] []被认为2-dimensional array

我咬 通过简单地一致地读取和写入,可以将整个二维数组展平为两个一维数组中的第一个。 即在第一个数组中依次存储第1行然后第2行,依此类推。 每当您移至下一行时,都将下一个单元格(第一个一维数组的索引)存储在第二个一维数组中,该数组实际上将成为行索引表。

正如乔恩·斯基特(Jon Skeet)上文所述,这不是一个非常明确的问题; 也许有了明确的信息,我们可以更好地为您提供帮助。

如果我能正确理解您的问题

M8很简单...

这只是一个算法问题..不是特定于编程语言的...

您可以这样做:

  1. 一个数组保存值
  2. 第二个数组包含键
  3. 尝试在第二个数组中找到一种解决方法,以了解您拥有哪些键。

     For example: array_1: v0 v1 v2 null v3 v4 v5 null v6 v7 v8 null array_2: 0 1 2 newR 0 1 2 newR 0 1 2 newR 

您也可以用一个数组表示它...但是您需要一种特定的算法来确定何时位于矩阵的Y上。

问题是您不会立即从内存访问数据。这就是为什么存在二维数组的原因

其它的办法:

  1. 将值保留在数组1中
  2. 将键作为字符串保留在第二个数组中,如以下示例所示:

     array1: value1 value2 value3 value4 value5 array2: 0,0 0,1 1,0 1,1 2,0 

有很多算法,但我不认为您会发现比二维数组更好的算法...

当您照看它们时,除非将它们保留在哈希表中,否则它们将具有较低的性能。哈希0,0并作为键添加到哈希表中,然后将指定的值添加到该键中。 那么您将寻找键“ 0,0” ...

我猜您想将2维数组(类型为RelevantType[,] )转换为2个数组(类型为SomeTypeA[]SomeTypeB[] )而不会丢失任何信息?

这不是很困难:让第一个数组的类型为RelevantType[] ,第二个数组的类型为int[] ,将二维数组的内容复制到第一个数组中,并将其第一个索引复制到第二个数组中,然后重做。

按行优先或列优先顺序展平二维数组,将其存储在一维数组中。 将数组的形状{n, m}存储在另一个1-d整数数组中。 给定2维值数组中元素的索引,您可以使用形状来计算1维值数组中的索引。

这两种表示是同构的,并且都允许在恒定时间内查找值。 这也类似于二维数组在内存中的表示方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM