Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用wpf C中的点访问二维阵列#_C#_Wpf_Arrays_Pointers - Fatal编程技术网

C# 使用wpf C中的点访问二维阵列#

C# 使用wpf C中的点访问二维阵列#,c#,wpf,arrays,pointers,C#,Wpf,Arrays,Pointers,我有一个类的2d数组。数组的大小非常大(大约3000*3000),使用普通的行和列方法访问数组需要花费很多时间。为此,我想使用指针访问数组 以下是我的数组代码: 类别定义: Class BoxData { Size _bound; bool _isFilled=false; Color _color=Colors.White; public Size Bounds { get { return _bound; } set

我有一个类的2d数组。数组的大小非常大(大约3000*3000),使用普通的行和列方法访问数组需要花费很多时间。为此,我想使用指针访问数组

以下是我的数组代码:

类别定义:

Class BoxData     
{
  Size _bound;
  bool _isFilled=false;
  Color _color=Colors.White;

  public Size Bounds
  {
    get
    {
      return _bound;
    }
    set
    {
      _bound=value;
    }
  }

  public bool IsFilled
  {
    get
    {
      return _isFilled;
    }
    set
    {
      _isFilled=value;
    }
  }

  public Color FillColor
  {
    get
    {
      return _color;
    }
    set
    {
      _color=value;
    }
  }
}
在应用程序中用作数组的类:

BoxData[,] boxData=new BoxData[3000,3000];
我想用指针访问boxData


谢谢

尝试使用锯齿状数组而不是多维数组,它们在Microsoft的CLR实现中

BoxData[][] boxData=new BoxData[3000][];
for (int i=0; i<3000; i++)
    boxData[i] = new BoxData[3000];     
BoxData[][]BoxData=new-BoxData[3000][];

对于(inti=0;i尝试使用锯齿状数组而不是多维数组,它们在Microsoft的CLR实现中

BoxData[][] boxData=new BoxData[3000][];
for (int i=0; i<3000; i++)
    boxData[i] = new BoxData[3000];     
BoxData[][]BoxData=new-BoxData[3000][];

对于(inti=0;i也许您可以使用结构而不是类来表示BoxData

Struct是一种值类型:在声明数组时,所有内容都已填充。 您将不再使用循环来创建
new BoxData()
实例

var x = new BoxData[3000,3000]; // Populated array of BoxData
由于结构与类的限制,您必须以这种方式删除初始值设定项

struct BoxData
{
    Size _bound;
    bool _isFilled; // = false;
    Color _color; // = Color.White;

    public Size Bounds
    {
        get
        {
            return _bound;
        }
        set
        {
            _bound = value;
        }
    }

    public bool IsFilled
    {
        get
        {
            return _isFilled;
        }
        set
        {
            _isFilled = value;
        }
    }

    public Color FillColor
    {
        get
        {
            return _color;
        }
        set
        {
            _color = value;
        }
    }
}
…并且使用循环初始化默认值会快得多

for (int j = 0; j < 3000; j++)
    for (int i = 0; i < 3000; i++)
        x[i, j].FillColor = Color.White;
for(int j=0;j<3000;j++)
对于(int i=0;i<3000;i++)
x[i,j].FillColor=Color.White;

也许您可以使用结构而不是类来处理BoxData

Struct是一种值类型:在声明数组时,所有内容都已填充。 您将不再使用循环来创建
new BoxData()
实例

var x = new BoxData[3000,3000]; // Populated array of BoxData
由于结构与类的限制,您必须以这种方式删除初始值设定项

struct BoxData
{
    Size _bound;
    bool _isFilled; // = false;
    Color _color; // = Color.White;

    public Size Bounds
    {
        get
        {
            return _bound;
        }
        set
        {
            _bound = value;
        }
    }

    public bool IsFilled
    {
        get
        {
            return _isFilled;
        }
        set
        {
            _isFilled = value;
        }
    }

    public Color FillColor
    {
        get
        {
            return _color;
        }
        set
        {
            _color = value;
        }
    }
}
…并且使用循环初始化默认值会快得多

for (int j = 0; j < 3000; j++)
    for (int i = 0; i < 3000; i++)
        x[i, j].FillColor = Color.White;
for(int j=0;j<3000;j++)
对于(int i=0;i<3000;i++)
x[i,j].FillColor=Color.White;

不,您不需要!…:)建议您发布(定时)导致问题的代码。您是否尝试过使用键值字典,使用的是使用XY坐标计算的键?@Mitch:我只是使用循环从数组中获取边界和颜色。@controlbreak:不,我没有尝试键值。如何将其用作数组???我很惊讶,访问数组非常快。您的意思是这需要时间吗是时候第一次填充它了?(3000x3000次迭代?)不,不!建议您发布导致问题的(定时)代码。您是否尝试使用使用XY坐标计算的键使用键值字典?@Mitch:我只是使用循环从数组中获取边界和颜色。@controlbreak:不,我没有试过键值。如何将其用作阵列???我很惊讶,访问阵列的速度非常快。你是说第一次填充它需要时间吗?(3000x3000迭代?)好的建议,但你应该说为什么。好的建议,但你应该说为什么。