ArrayList 提供将只读和固定大小包装返回到集合的方法,我觉得你要实现这个方法,使用arraylist不是个好的方法,使用array可以通过的,array允许一次获取或设置一个元素的值

解决方案 »

  1.   

    或者你采用元素移除与添加的方法也是可以的,这样还可以使用arrayList的优点
      

  2.   

    as you might know, if you put a ValueType inside an ArrayList, there are boxing/unboxing issuesbut any way, you could use a hashtable instead
             Hashtable ht = new Hashtable ();
    ArrayList  list=new ArrayList();
            
            for (int i=0;i<split.Length;i++)
    {
       if(split[i].Length>1)
    {
    StruWord sw; string sWord = split[i].ToLower(); if (ht.Contains(sWord))
    {
    int n = (int)ht[sWord];
    sw = (StruWord)list[n];
    sw.inFreq++;
    list[n] = sw;
    }
    else
    {
    sw = new StruWord();                      sw.word=sWord;
                          sw.inFreq=1;
        sw.weight=0;
        sw.totalFreq=0;
                          list.Add(sw); ht[split[i]] = list.Count - 1;
    }
              
    }

    } foreach (StruWord sw in list)
    {
    Console.WriteLine("{0} = {1}", sw.word, sw.inFreq);
    }
      

  3.   

    对,建议用Hashtable,用ArrayList确实效率低下。
      

  4.   

    to : saucer(思归/MVP) ( ) 信誉:342 是不是漏写了一句,在程序中好像不能直接用:
    ht[split[i]] = list.Count - 1;  // ?是不是应该是:
    ht.Add(split[i], list.Count - 1);  见笑了。
      

  5.   

    上面的Hashtable只是记住对象在ArrayList里的index而已可以不用ArrayList,而直接用Hashtable记住对象,如果不在乎词的次序的话Hashtable ht = new Hashtable ();        for (int i=0;i<split.Length;i++)
    {
       if(split[i].Length>1)
    {
    StruWord sw; string sWord = split[i].ToLower(); if (ht.Contains(sWord))
    {
    sw = (StruWord)ht[sWord];
    sw.inFreq++;
    ht[sWord] = sw;
    }
    else
    {
    sw = new StruWord();                      sw.word=sWord;
                          sw.inFreq=1;
        sw.weight=0;
        sw.totalFreq=0;
    ht[sWord] = sw;
    }
              
    }

    } foreach (string s in ht.Keys)
    {
    Console.WriteLine("{0} = {1}", s, ((StruWord)ht[s]).inFreq);
    }
      

  6.   

    多谢 saucer(思归/MVP) ( ) 大侠,今天又学了一招。
      

  7.   


    我还是通过重新添加的办法解决了问题(代码如下),但是看了思归的方法,自愧相差太远
    学习了。for(int m=0;m<list.Count-1;m++)
    {
    for(int n=m+1;n<list.Count;n++)
    {
    if(((StruWord)list[m]).word==((StruWord)list[n]).word)
    {
    StruWord struWord2;
                      struWord2.inFreq=((StruWord)list[m]).inFreq+1;
             struWord2.totalFreq=0;
    struWord2.weight=0;
    struWord2.word=((StruWord)list[m]).word;

    list.RemoveAt(m);
    list.Insert(m,struWord2);
    list.RemoveAt(n);
    n=n-1;

    }
    }
    }