ArrayList的选择删除

   很很多次都想在自己的BLOGYY一下,但在写到一半的,一下都很痛恨自己以前不多看一看小,才弄的在自己的文笔是这么,于是又将写的那些西给删.

  说,昨天在快要下班之,接到任要添加个新功能:户输入一些数据,之后清除掉小于平均数的数据,要是C++那就好了,找个vector容器,在弄个仿函数什么的要什么功能都解决了,但在.NET中的就想到用ArrayList行收集数据. 但清除想用foreach就不行了(只读迭代器)

        ArrayList container  =   new  ArrayList();

        
public   int  Add( uint  val)
        
{
            
return container.Add(val);
        }


        
public   void  Clean( uint  val)
        
{
            
for (int i=0;i<container.Count;i++)
            
{
                
if ((uint)container[i] < val)
                
{
                    container.RemoveAt(i);
                }

            }

        }

好了,赶紧测试,呵呵,问题来了数据肯定不正确了,最先向导container.Count是动态变化的,而且在删除数据时ArrayList中的数据索引又已经变动了.这时下班时间已过,这时大脑已经只想回家了,想了下面一个馊主意:

public   void  Clean( uint  val)
        
{
            ArrayList temp 
= new ArrayList(10);
            
for(int i = 0;i<container.Count;i++)
            
{
                
if ((uint)container[i] < val)
                
{
                    temp.Add(container[i]);
                }

            }


            
if(temp.Count <= 0)
                
return;

            
for(int i=0;i<temp.Count;i++)
            
{
                
if(list.Contains(temp[i]))
                
{
                    container.Remove(temp[i]);
                }

            }

        }

好了,弄好走人...早上想起来那代码真是吓人呀,还好没提交掉,赶紧到公司来个大早,想一想有几种方法解决,
1.进行排序在使用ArrayList的RemoveRange方法(局限行比较大,因为这个方法是删除连续的元素,选择条件不灵(要是只清除奇数呢)还有前面那个排序,真是恶心)
2.想一下昨天开始的代码为什么不行,原因是删除元素后,里面元素的索引(不敢说位置,呵呵)发生了变化.进行修改以下:

public   void  Clean( uint  val)
        
{
            
for (int i=0;i<container.Count;i++)
            
{
                
if ((uint)container[i] < val)
                
{
                    container.RemoveAt(i);
                    i 
--;
                }

            }

        }

万事大吉,OK,咋一看,这代码我以前不是写过吗,我倒!#$^&*$^#$

                      写程序的时候真的来不得半点马虎呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值