C#将一些较小的数组转换为一个较大的数组

时间:2015-04-28 21:58:42

标签: c# arrays math

标题可能无法完全解释我想要做什么,所以我制作了一张图片。

enter image description here

你可以看到有4个1D阵列(红色数字,黑色数字是索引),每个数组从0到63.我想以某种方式翻译它们,例如,索引16将指向第一个索引第二个数组。

我想到的是一个函数,我给出了我想要作为输入获取的数组和索引的列表,它返回数组的索引和此数组中的精确索引作为输出。

我想就如何继续实现此功能提供一些提示或建议。

1 个答案:

答案 0 :(得分:0)

好的,你的图像显示了16个元素的交错数据,所以你想拥有(由于空间而只显示两个矩阵的例子:D)

Global index
 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15   16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
-----------------------------------------------------------------------------------------------------
Array0 indexes                                  - Array1 indexes
 0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F -  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
-------------------------------------------------------------------------------------------------

Global index
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48   49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
-----------------------------------------------------------------------------------------------------
Array0 indexes                                  - Array1 indexes
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F - 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F

为了得到它你可以做这样的事情:

public class CompositeIndex
{
    public int ArrayNumber { get; set; }
    public int ElementNumber { get; set; }
}

public static CompositeIndex GetIndex(int GlobalIndex, int ArrayCount, int ElementsToInterleave)
{
    CompositeIndex index = new CompositeIndex();
    int fullArrays = GlobalIndex / ElementsToInterleave; //In your example: 16 / 16 = 1;
    index.ArrayNumber = fullArrays % ArrayCount; //In your example: 1 mod 4 = 1;

    index.ElementNumber = GlobalIndex - (fullArrays * ElementsToInterleave); //In your example: 16 - (1 * 16) = 0;
    return index;
}

然后,如果您有4个矩阵并想要获得“全局”索引16,那么:

var index = GetIndex(16, 4, 16);

此功能允许您使用不确定数量的数组和交错元素。

顺便说一句,另一次问你更好的问题,如果他们不需要解决谜题来了解你想要的东西,就会有更多人帮助你......