首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法将数组的非连续子集公开为单个数组?

是否有一种方法将数组的非连续子集公开为单个数组?
EN

Stack Overflow用户
提问于 2012-10-28 14:55:06
回答 2查看 116关注 0票数 2

在我的项目中,我有一个类似于以下类的类:

代码语言:javascript
复制
public class Vertices
{
    float[] vertexData1;
    int   vertexData1Offset;

    float[] vertexData2;
    int   vertexData2Offset;

    float[] vertexData3;
    int   vertexData3Offset;

    float[] vertexBuffer;

    int vertexCount;
    int vertexStride;

    public void Update()
    {
        for(int i = 0; i < vertexCount; i++)
        {
            vertexBuffer[(i * vertexStride) + vertexData1Offset] = vertexData1[i];
            vertexBuffer[(i * vertexStride) + vertexData2Offset] = vertexData2[i];
            vertexBuffer[(i * vertexStride) + vertexData3Offset] = vertexData3[i];
        }
    }
}

也就是说,我有一个数组(vertexBuffer),这个数组是另一组数组(vertexData1.)的组合。只有数组组合的方式,每个“组件数组”的元素在整个“主数组”中均匀分布,所有这些元素都混乱起来,而不是每个数组依次连接起来。

我想知道是否有一种方法可以公开这些数组(例如,子类数组) (vertexData1...),这样该类的使用者就可以访问它们,就好像它们是具有连续元素的常规数组一样(包括复制到和复制),但是在幕后,对象实际上是在整个vertexBuffer中分发这些元素,从而消除了对()方法和重复数据的需求。

在C#?中有这个可能吗?

EN

回答 2

Stack Overflow用户

发布于 2012-10-28 15:03:42

是的,你可以使用索引器。类似于:

代码语言:javascript
复制
public class Vertices
{
    float[] vertexData1;
    int   vertexData1Offset;

    float[] vertexData2;
    int   vertexData2Offset;

    float[] vertexData3;
    int   vertexData3Offset;

    private float[] GetArrayForIndex(int index) {
      switch (index / vertexStride) {
        case 0: return verdexData1;
        case 1: return vertedData2;
        case 2: return vertexData3;
        default: throw new IndexOutOfRangeException();
      }
    }

    public float vertexBuffer[int index] {
      get {
        return GetArrayForIndex(index)[index % vertexStride];
      }
      set {
        GetArrayForIndex(index)[index % vertexStride] = value;
      }
    }

    int vertexStride;

}

我不知道你想如何安排索引器中的数据。您可能希望交换/%的使用,这取决于您是希望彼此之间的数组还是交错的。

票数 3
EN

Stack Overflow用户

发布于 2012-10-28 15:08:14

您可以实现索引器这个in索引,并在其中提供自己的功能:

代码语言:javascript
复制
public class Vertices
{
  public float this[int index]
  {
    get
    {
      // do your stuff here
    }
    set
    {
      // do your stuff here
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13109882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档