none
如何去掉Array中末尾都为0的项? RRS feed

答案

  • private void button2_Click(object sender, EventArgs e)
            {
                byte[] aa = { 1, 0, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0 };
                ArrayList al=new ArrayList(aa);
                for (int i =aa.Length-1; i >=0; i--)
                {
                    if (aa[i] == 0)
                    {
                        al.RemoveAt(i);
                    }
                    else
                    {
                        break;
                    } 
                }
    
                for (int i = 0; i < al.Count; i++)
                {
                    MessageBox.Show(al[i].ToString());
                }
            }


    http://blog.csdn.net/zx13525079024

    2012年6月28日 2:27
  • Hi A013strife,

    每一种技术都是自己擅长的领域。Linq更多的是做数据查询。我这么说并不是因为这个问题不能用Linq解决,只是不建议用LInq来做。

    这里是我的另外一种开销稍微少点的方法:

                byte[] aa = { 1, 0, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0 };
                int i = aa.Length - 1;
                while (aa[i--] == 0 && i > -1) ;
                i = i + 1;
                byte[] NewBytes = new byte[i + 1];
                Array.Copy(aa, NewBytes, i + 1);

    希望有用.



    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年6月29日 13:48
    版主

全部回复

  • private void button2_Click(object sender, EventArgs e)
            {
                byte[] aa = { 1, 0, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0 };
                ArrayList al=new ArrayList(aa);
                for (int i =aa.Length-1; i >=0; i--)
                {
                    if (aa[i] == 0)
                    {
                        al.RemoveAt(i);
                    }
                    else
                    {
                        break;
                    } 
                }
    
                for (int i = 0; i < al.Count; i++)
                {
                    MessageBox.Show(al[i].ToString());
                }
            }


    http://blog.csdn.net/zx13525079024

    2012年6月28日 2:27
  • byte[] aa = {1,0,2,3,4,0,0,0,0,0,0,0}

    这样,我想去掉最后面全部0,怎么去掉呢?

    你可以借助List的威力!

    参考以下代码:

     List<byte> bytes = new List<byte>(new byte[]{1,0,2,3,4,0,0,0,0,0,0,0});
                byte[] results = bytes.FindAll(b => b != 0).ToArray();
    

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 a013strife 2012年6月29日 9:55
    • 取消答案标记 a013strife 2012年6月29日 9:55
    2012年6月28日 2:53
    版主
  • 我是想用你这样的linq但是你这种写法会去掉全部0,我只需要去掉末尾的0...
    2012年6月29日 9:56
  • 目前我是用这种方法做的,但是想用linq做下,不知怎么写好,谢谢!

    2012年6月29日 9:56
  • Hi A013strife,

    每一种技术都是自己擅长的领域。Linq更多的是做数据查询。我这么说并不是因为这个问题不能用Linq解决,只是不建议用LInq来做。

    这里是我的另外一种开销稍微少点的方法:

                byte[] aa = { 1, 0, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0 };
                int i = aa.Length - 1;
                while (aa[i--] == 0 && i > -1) ;
                i = i + 1;
                byte[] NewBytes = new byte[i + 1];
                Array.Copy(aa, NewBytes, i + 1);

    希望有用.



    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年6月29日 13:48
    版主