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

时间:2011-12-15 12:35:06

标签: c# java arrays algorithm

你可能会对我的要求感到奇怪,但这是真的,将1 two-dimensional array转换为 2 one-dimensional arrays

这就是我的老师问的问题,他说他会给那些回答这个(我认为是棘手的)问题的人提供一个完美的观点。我很乐意将任何2维或n维数组转换为一维数组。但他说2,所以我认为必须与第二阵列有关。而且,他没有说出什么类型的数组(int,String或object),所以我认为必须使用任何类型的二维数组。

如果没有人在这里找出他想要的东西,我将回答他:转换为1维数组,并留下第二个空(或让它没有元素)。但我认为这个棘手的问题不是一个好的答案。

编辑:这是我的老师问题,逐字逐句(他只是在会话结束时用语音问,而不是在教科书中,作为奖励问题(用......)一个很好的奖励奖励)):给定 a 2-dimensional array,将其转换为两个 1-dimensional array

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

EDIT2:我给他发了电子邮件,他拒绝透露更多信息(他说如果我的信息比他们多,那对他人不公平),并且他没有给出任何关于锯齿的评论阵列的想法。他回答中唯一有用的事情:让[] []被视为2-dimensional array

4 个答案:

答案 0 :(得分:6)

我会咬人的。通过简单地一致地读取和写入,可以将整个二维阵列展平为两个一维阵列中的第一个。即在第一个数组中依次存储第1行然后第2行等。每当你移动到下一行时,将下一个单元格(第一个一维数组的索引)的索引存储在第二个一维数组中,这将基本上成为一个行索引表。

正如Jon Skeet所说,这不是一个非常明确的问题;也许有明确的信息,我们可以更好地帮助你。

答案 1 :(得分:2)

如果我理解你的问题

很容易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
    
  4. 您也可以在一个数组中表示它......但是您需要一个特定的算法来确定何时位于矩阵的Y上。

    问题是你不会立即从内存中访问数据..这就是存在二维数组的原因

    另一种方式:

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

      array1: value1 value2 value3 value4 value5
      array2: 0,0    0,1    1,0    1,1    2,0
      
    3. 有很多算法,但我认为你不会发现比二维数组更好......

      当你照顾它们时,你会有更少的性能.. ofc ..除非你把它们保存在哈希表中。哈希0,0并在哈希表中添加为键并将指定值添加到该键。然后你会找到关键的“0,0”...

答案 2 :(得分:1)

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

这不是很难: 让第一个数组为RelevantType[]类型,第二个类型为int[]类型,将第二个数组的内容复制到第一个数组中,将第一个数组复制到第二个数组中,然后将其复制到第二个数组中完成。

答案 3 :(得分:1)

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

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