关于 List[][] 大家见过这样的用法么?

时间:2022-09-21 23:18:04
以前使用泛型,数组用 List <List<float>>  能实现,现在接收一个项目,要修改完善前任的程序。他里面有 这么一段,始终无法编译,请大神们看看。


 public class SharedData
        {
            public List<float>[][] zb_list;
            public float[][] zb_average_value;
            
            public SharedData()
            {
                zb_list = new List<float>[360][];
                zb_average_value = new float[360][];
                for (int idx = 0; idx < zb_list.Length; ++idx)
                {
                    zb_list[idx] = new List<float>[800];
                    zb_average_value[idx] = new float[800];
                }               

            }
        }




//使用过程,button按钮的事件

private void button1_Click(object sender, EventArgs e)
        {
            AppCoreSharedData apdat = new AppCoreSharedData();
            

           如何给apdat数组赋值?
            //}



循环赋值时后总报错。

        

19 个解决方案

#1


是反编译的代码吧?
List<float> 改为 float 

#2


不是,是源程序,喔理解为二维泛型数组

#3


“接手”那就把这类代码重做吧。

#4


有这个打算,但他这种定义方式有很多,现在问题就是无法赋值,总报错,我的理解apdat实例化后,apdat.zb_list已经开辟了360*800的空间,但填充数值时候一直报错。哪位大神能实现一下,对apdat.zb_list添加数值。

#5


那就全换成 List <List<float>>
按你熟悉的方式来

#6


按照我的方式已经实现,就是他这个我一直理解不了,所以来请教。

#7


其实这样初始化蛮好的
List<List<float>>
Enumerable.Repeat(new List<float>(Enumerable.Repeat(0f, 800)), 360).ToList()
float[][]
Enumerable.Repeat(Enumerable.Repeat(0f, 800).ToArray(), 360).ToArray()

#8


           版主说的对,
           AppCoreSharedData apdat = new AppCoreSharedData();
             for (int j = 0; j < 360; j++)
              for(int k=0;k<800;k++)
            {
                   apdat.zb_list[j][k].add(0.1f);

            }

        //一直报错,无法通过

#9


报什么错????

#10


我大致可以猜到你报什么错了
  apdat.zb_list[j][k].add(0.1f);
  apdat.zb_list[j][k] 其实是list<float> ,List<float>引用类型, 数组虽然new了,但数组里面的内容没有new
  apdat.zb_list[j][k]=new List<float>
  apdat.zb_list[j][k].add(0.1f);

#11


 apdat.zb_list[j][k] = 0.1f;

       public class SharedData
       {
            public float[][] zb_list;
            public float[][] zb_average_value;
            
            public SharedData()
            {
                 zb_list = Enumerable.Repeat(Enumerable.Repeat(0f, 800).ToArray(), 360).ToArray();
                 zb_average_value = Enumerable.Repeat(Enumerable.Repeat(0f, 800).ToArray(), 360).ToArray();
            }
       }

#12


float[][] 是二维交错数组
list<float>[][] 是三围交错数组 
应该不能互换

#13


不应该随意修改原始代码,未经测试,更不应该乱说!
            List<float>[][] zb_list;
            zb_list = zb_list = Enumerable.Repeat(Enumerable.Repeat(new List<float>(), 800).ToArray(), 360).ToArray();
这样是对的
zb_list 是一个二维交错数组,其每个成员都是一个 List<float> 对象
你的问题在于 zb_list[idx] = new List<float>[800]; 后未对其中的每个 List<float> 实例化

#14


list<float> 和数组区别大吗??如果从逻辑上看,list 不过是动态的数组

#15


 public List<float>[][]是一个由 public List<float>[]构成的数组,而 public List<float>[]又是由 public List<float>构成的数组,而 public List<float>是由float构成的列表
无非就是嵌套多了一点而已。

#16


版主的说明是对的,因为没这样用过,所以在实例化是后总报错,调试也能看出主要里面的值是null。
 public class SharedData
        {
            public List<float>[][] zb_list;
            public float[][] zb_average_value;
            
            public SharedData()
            {
             //   zb_list = new List<float>[360][];
                zb_average_value = new float[360][];
                zb_list = Enumerable.Repeat(Enumerable.Repeat(new List<float>(), 800).ToArray(), 360).ToArray();

            }
        }




//使用过程,button按钮的事件

private void button1_Click(object sender, EventArgs e)
        {
            AppCoreSharedData apdat = new AppCoreSharedData();
        
            apdat.zb_list = Enumerable.Repeat(Enumerable.Repeat(new List<float>(), 800).ToArray(), 360).ToArray();
            for (int j = 0; j < 360; j++)
              for(int k=0;k<800;k++)
            {
                 apdat.zb_list[j][k]=0.1f;

            }

        }

    错误: 无法将类型“float”隐式转换为“System.Collections.Generic.List<float>”  //}

#17


对的,添加数值时候要 new一下,就可以了

#18


具体值的取出,同三维数组

#19


该回复于2018-05-06 08:54:26被管理员删除

#1


是反编译的代码吧?
List<float> 改为 float 

#2


不是,是源程序,喔理解为二维泛型数组

#3


“接手”那就把这类代码重做吧。

#4


有这个打算,但他这种定义方式有很多,现在问题就是无法赋值,总报错,我的理解apdat实例化后,apdat.zb_list已经开辟了360*800的空间,但填充数值时候一直报错。哪位大神能实现一下,对apdat.zb_list添加数值。

#5


那就全换成 List <List<float>>
按你熟悉的方式来

#6


按照我的方式已经实现,就是他这个我一直理解不了,所以来请教。

#7


其实这样初始化蛮好的
List<List<float>>
Enumerable.Repeat(new List<float>(Enumerable.Repeat(0f, 800)), 360).ToList()
float[][]
Enumerable.Repeat(Enumerable.Repeat(0f, 800).ToArray(), 360).ToArray()

#8


           版主说的对,
           AppCoreSharedData apdat = new AppCoreSharedData();
             for (int j = 0; j < 360; j++)
              for(int k=0;k<800;k++)
            {
                   apdat.zb_list[j][k].add(0.1f);

            }

        //一直报错,无法通过

#9


报什么错????

#10


我大致可以猜到你报什么错了
  apdat.zb_list[j][k].add(0.1f);
  apdat.zb_list[j][k] 其实是list<float> ,List<float>引用类型, 数组虽然new了,但数组里面的内容没有new
  apdat.zb_list[j][k]=new List<float>
  apdat.zb_list[j][k].add(0.1f);

#11


 apdat.zb_list[j][k] = 0.1f;

       public class SharedData
       {
            public float[][] zb_list;
            public float[][] zb_average_value;
            
            public SharedData()
            {
                 zb_list = Enumerable.Repeat(Enumerable.Repeat(0f, 800).ToArray(), 360).ToArray();
                 zb_average_value = Enumerable.Repeat(Enumerable.Repeat(0f, 800).ToArray(), 360).ToArray();
            }
       }

#12


float[][] 是二维交错数组
list<float>[][] 是三围交错数组 
应该不能互换

#13


不应该随意修改原始代码,未经测试,更不应该乱说!
            List<float>[][] zb_list;
            zb_list = zb_list = Enumerable.Repeat(Enumerable.Repeat(new List<float>(), 800).ToArray(), 360).ToArray();
这样是对的
zb_list 是一个二维交错数组,其每个成员都是一个 List<float> 对象
你的问题在于 zb_list[idx] = new List<float>[800]; 后未对其中的每个 List<float> 实例化

#14


list<float> 和数组区别大吗??如果从逻辑上看,list 不过是动态的数组

#15


 public List<float>[][]是一个由 public List<float>[]构成的数组,而 public List<float>[]又是由 public List<float>构成的数组,而 public List<float>是由float构成的列表
无非就是嵌套多了一点而已。

#16


版主的说明是对的,因为没这样用过,所以在实例化是后总报错,调试也能看出主要里面的值是null。
 public class SharedData
        {
            public List<float>[][] zb_list;
            public float[][] zb_average_value;
            
            public SharedData()
            {
             //   zb_list = new List<float>[360][];
                zb_average_value = new float[360][];
                zb_list = Enumerable.Repeat(Enumerable.Repeat(new List<float>(), 800).ToArray(), 360).ToArray();

            }
        }




//使用过程,button按钮的事件

private void button1_Click(object sender, EventArgs e)
        {
            AppCoreSharedData apdat = new AppCoreSharedData();
        
            apdat.zb_list = Enumerable.Repeat(Enumerable.Repeat(new List<float>(), 800).ToArray(), 360).ToArray();
            for (int j = 0; j < 360; j++)
              for(int k=0;k<800;k++)
            {
                 apdat.zb_list[j][k]=0.1f;

            }

        }

    错误: 无法将类型“float”隐式转换为“System.Collections.Generic.List<float>”  //}

#17


对的,添加数值时候要 new一下,就可以了

#18


具体值的取出,同三维数组

#19


该回复于2018-05-06 08:54:26被管理员删除

#20