日期:2014-05-16  浏览次数:21174 次

byte[,]和byte[][]如何转换为byte[]
c/c++里的byte mydata[5][5],mydata[0]就是一个数组的首地址
那c#里一个二维数组如何转换为一维数组?
谢谢!
------解决方案--------------------
List<byte> a;
二维数组循环添加到a中
byte[] = a.ToArray()
这个效率较差 二维数组很少用
------解决方案--------------------
  public static IEnumerable<T> ToEnumerable<T>(this Array target)
        {
            foreach (var item in target)
                yield return (T)item;
        }

test:
  int[,] aa = new int[2, 2] {{1, 2}, {1, 2}};
            int[,,] aaa = new int[2,2,2] {{{1,2},{1,2}}, {{1,2},{1,2}}};

            var enumerable = from i in aaa.ToEnumerable<int>()
                select i;
            foreach (var i in enumerable)
            {
                Console.WriteLine(i);
            }

            foreach (var i in aaa)
            {
                Console.WriteLine(i);
            }
            Console.Clear();
           Console.WriteLine(aaa[1,0,0]);
------解决方案--------------------
byte[] result = new byte[data.GetLength(0) * data.GetLength(1)];
for (int i = 0; i < result.GetLength(0); i++)
{
    result[i] = data[i / data.GetLength(1), i % data.GetLength(1)];
}
------解决方案--------------------
这个写循环就可以解决了,先计算总长度,然后 new 一下,再复制,感觉没有什么技巧可用。
------解决方案--------------------
如果是交错数组,可以用linq:
byte[] result = data.SelecMany(x => x).ToArray();