怎样得到二维数组的一维数据

jiangfanghong 2010-05-13 11:26:26
我定义了一个二维数组byte[] f = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 },{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },{ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }};
我怎么样才能得到{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }这组数据??请大家帮忙,谢谢了。。。。
...全文
402 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zzx509 的回复:]
C# code

byte[][] f = { new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, new byte[] { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, new byte[] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, new byte[] { 0, 0, 0, 1, 0, 0, 0, 1, 0,……
[/Quote]

推荐
依然白板 2010-05-24
  • 打赏
  • 举报
回复
只能说, C#和C++在2维数组上定义不一样。
Byte[][] 叫交错数组, 有时也叫二重数组, 锯齿数组。
Byte[,] 才是二维数组。

区别在于 交错数组里, 每一个数组的长度可以不一致。
deknight 2010-05-24
  • 打赏
  • 举报
回复
mark
yongyinmg 2010-05-24
  • 打赏
  • 举报
回复
这是交错数组,不是二维数组
jiangfanghong 2010-05-24
  • 打赏
  • 举报
回复
谢谢各位,我试了下,我是这样写的:
byte[] F0 = { 0, 0, 0, 0, 0};
byte[] F1 = { 0, 0, 0, 0, 0};
byte[] F2 = { 0, 0, 0, 0, 0};
byte[] F3 = { 0, 0, 0, 0, 0};
byte[][] F = new byte[4][];//定义二维数组
F[0] = F0;
F[1] = F1;
F[2] = F2;
F[3] = F3;
然后在后面就可以使用F[0],F[1],F[2],F[3]得到一维数据了。

直接定义byte[][] F = {{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0}}, F[0]是得不到一维数据的。
jiangfanghong 2010-05-24
  • 打赏
  • 举报
回复
如果按照Byte[,]定义,无法用F[0]得到数据。
兔子-顾问 2010-05-13
  • 打赏
  • 举报
回复
引用伴水#12楼的回复

几个字节没有意义,但上万个字节就有意义了。
一次内存拷贝和一万次内存拷贝还是有性能上的差别。
兔子-顾问 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zzx509 的回复:]
只取0当然就不用循环了。f[0]就是了。
4楼,你的方法是内存拷贝,楼主也没有说过要复制
[/Quote]

星星和非星星的区别,被过客定义过。就是星星回复的时候基本会经过测试。
你测试过他的代码么?
二维数组是他这么定义的么?
他实际的意思应该是我贴的代码那样。
byte[,],这叫二维数组
byte[][]这不叫二维数组
所以不存在f[0]这样的写法。
第一个元素是f[0,0],第十一个元素是f[1,0]。
楼主没说不能复制,这种复制,如果数据很多,效率是很明显提升的。我贴的那个帖子有说明了。
zzx509 2010-05-13
  • 打赏
  • 举报
回复
只取0当然就不用循环了。f[0]就是了。
4楼,你的方法是内存拷贝,楼主也没有说过要复制
兔子-顾问 2010-05-13
  • 打赏
  • 举报
回复
要学会搜索,精华帖还是有帮助的。
http://topic.csdn.net/u/20100408/16/220edfc4-2e73-4acd-9bb4-cee63355c795.html?91230
3楼,算法大神伴水已经给出过类似答案。

说了不用for,3楼故意捣乱的吧。
兔子-顾问 2010-05-13
  • 打赏
  • 举报
回复
byte[,] f = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } };
IntPtr dest = Marshal.UnsafeAddrOfPinnedArrayElement(f, 0);
byte[] b = new byte[f.Length / f.GetLength(0)];
Marshal.Copy(dest, b, 0, f.GetLength(0));
zzx509 2010-05-13
  • 打赏
  • 举报
回复

byte[][] f = { new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, new byte[] { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, new byte[] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, new byte[] { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } };
for (int i = 0; i < f.Length; i++)
{
byte[] b = f[i];
}
lon123 2010-05-13
  • 打赏
  • 举报
回复
byte[0]..................
jiangfanghong 2010-05-13
  • 打赏
  • 举报
回复
不用for循环。
spmzfz 2010-05-13
  • 打赏
  • 举报
回复
一个很低能的方法:

byte[,] f = { { 1, 2, 3, 4, 5, 6, 7, 8,9, 0 }, { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 },{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },{ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } };
byte[] B = new byte[f.GetLength(1)];

for (int i =f.GetLowerBound(1) ; i <f.GetUpperBound(1); i++)
{
B[i] = f[0, i];
}

foreach (var item in B)
{
Console.Write("{0} ", item);
}


另外楼主的定义有错误,应申明为二维数组 byte[,] ,别忘了在[]中加逗号
lijin177036962 2010-05-13
  • 打赏
  • 举报
回复
byte [] a =byte[0];
成功解决.!
much0726 2010-05-13
  • 打赏
  • 举报
回复
byte[] f 这个是而为数组?
mngzilin 2010-05-13
  • 打赏
  • 举报
回复
            byte[][] b = { new byte[]{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
new byte[]{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
new byte[]{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
new byte[]{ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } };


b[0]就是 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }

110,553

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧