C# 求教一个不算好难的功能 Distinct()的值

headsonlkc 2010-10-11 05:16:36
我定义了一个:

byte[] a = new byte[15] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };

MessageBox.Show(a.LongLength.ToString());
//十五个数组

byte[] b=a.Distinct().ToArray();
//经过这个功能处理过后,有数据丢失了

MessageBox.Show(a.Distinct().ToArray().LongLength.ToString ());
//得到7位,这个也不对,应该有8位

MessageBox.Show(b[0].ToString()); //1
MessageBox.Show(b[1].ToString()); //2
MessageBox.Show(b[2].ToString()); //3
MessageBox.Show(b[3].ToString()); //4
MessageBox.Show(b[4].ToString()); //5
MessageBox.Show(b[5].ToString()); //6
MessageBox.Show(b[6].ToString()); //0这个不应该是6的吗?为什么是零?


有什么方法以数组形式截取有效的内容?
我要的结果希望是:
得到这个值{ 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6};

分不够再加,能解决就好!
...全文
369 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
java447060786 2010-10-11
  • 打赏
  • 举报
回复
Distinct得到的是唯一,怎么可能得到两个6的呀,当然是0啦
headsonlkc 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyazhe 的回复:]
只是这么个意思,自己优化一下。

C# code
byte[] a = new byte[15] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
int i = a.Length;
while (--i > 0 && a[i] == 0) ;
i++;
byt……
[/Quote]

就是要这个结果
phil999 2010-10-11
  • 打赏
  • 举报
回复
把数组里的0去掉?可以用linq

from i in arr where i != 0 select i
phil999 2010-10-11
  • 打赏
  • 举报
回复
没有看懂楼主想要什么样的结果
兔子-顾问 2010-10-11
  • 打赏
  • 举报
回复
只是这么个意思,自己优化一下。
byte[] a = new byte[15] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
int i = a.Length;
while (--i > 0 && a[i] == 0) ;
i++;
byte[] b = new byte[i];
Array.Copy(a, b, i);
这样就快了。
headsonlkc 2010-10-11
  • 打赏
  • 举报
回复
这个WHILE 如果是在 1W 个以上的数组的有点慢
xuld 2010-10-11
  • 打赏
  • 举报
回复
b.ToArray();
deyygywxf 2010-10-11
  • 打赏
  • 举报
回复
你这?Distinct就是唯一了
http://msdn.microsoft.com/zh-cn/library/bb348436.aspx
headsonlkc 2010-10-11
  • 打赏
  • 举报
回复
错误
List<byte> b = new List<byte>(a);
如何再转回byte[] 这个类,
不然调用出错
与“PL.PA.ByteTString(byte[])”最匹配的重载方法具有一些无效参数
参数“1”: 无法从“System.Collections.Generic.List<byte>”转换为“byte[]”
headsonlkc 2010-10-11
  • 打赏
  • 举报
回复
楼上这个可以哦,能说说第二句的意思吗?

另我先套入试一上,没有问题再给分,谢谢
兔子-顾问 2010-10-11
  • 打赏
  • 举报
回复
static void Main(string[] args)
{
byte[] a = new byte[15] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
List<byte> b = new List<byte>(a);
while (b.Count > 0 && b[b.Count - 1] == 0) b.RemoveAt(b.Count - 1);
foreach (byte item in b)
{
Console.Write(item + " ");
}
Console.ReadKey();
}
兔子-顾问 2010-10-11
  • 打赏
  • 举报
回复
你这?Distinct就是唯一了
http://msdn.microsoft.com/zh-cn/library/bb348436.aspx

110,499

社区成员

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

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

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