【问题标题】:Writing one-dimensional array into two-dimensional [closed]将一维数组写入二维[关闭]
【发布时间】:2012-01-29 18:52:04
【问题描述】:

假设我有一个从控制台输入的字符数组。如何通过以下方式将它们写入二维数组:

1 6 11 16 21

2 7 12 17 22

3 8 13 18 23

4 9 14 19 24

5 10 15 20 25

还是使用列表更好?

谢谢!

【问题讨论】:

  • 你想做什么?
  • 我正在尝试用从控制台输入的字符数组填充矩阵 5*5。就从现在开始。最终,我必须实施“双重转置”——加密方法。
  • 那么您将根据答案开始使用 f# 或 c# 进行编码?
  • 不,我都试过了。而且我有 4 个相同的列或相同字符的整个矩阵等。
  • 为什么这个问题被否决了?

标签: c# arrays f#


【解决方案1】:

假设您有一个长度为 25 的一维数组中的输入:

let inputs = [| 1 .. 25 |]

您可以使用Array2D.init 函数创建一个将数据存储在 5x5 网格中的二维数组:

let arr = Array2D.init 5 5 (fun i j -> inputs.[j*5 + i])

该函数使用指定的大小(前两个参数)初始化数组,并调用提供的函数来填充数组中每个元素的值。通过访问索引j*5 + i 处的元素,您可以获得示例中所需的结构。

编辑您不能将行附加到数组(数组具有固定大小),但您可以轻松创建更大的数组并在那里复制数据:

let bigger = Array2D.zeroCreate 6 5
// Copy the whole contents of the original array
bigger.[0..4, 0..4] <- arr     
// Write new data to the last row
bigger.[5..5, 0..4] <- array2D [[5;10;15;20;25]]

【讨论】:

  • 是否可以将行 [0,*] 追加到这个新创建的数组中?
  • @sega 查看更新后的答案。
【解决方案2】:

如果您在输入数字/字符之前知道二维数组的大小,只需使用适当的循环在正确的位置输入。如果没有,则需要从数组重写为二维数组(“表”)使用循环

for (int i=0; i<5; i++)
    for(int j = 0; j < 5; j++)
       array2D[j,i] = array[j+i*5]

这将遍历数组中的每个字符,并将它们放在二维数组中的正确位置。

【讨论】:

  • -1 表示不使用 F#。只是在开玩笑。 ;-)
猜你喜欢
  • 2017-01-03
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2012-04-07
相关资源
最近更新 更多