0

別のデータベースからの値を含む1つの配列リストがありますが、重複する値がいくつか保存されているため、重複する値を削除して一意の値のみを配列リストに保存したいと考えています。

これはどのように行うことができますか?

4

6 に答える 6

12

別の方法を試してみましょう。重複を削除する代わりに、重複を追加しないようにします。これは、ご使用の環境ではより効率的である可能性があります。サンプルコードは次のとおりです。

ArrayList<String> myList = new ArrayList<string>();
foreach (string aString in myList)
{
    if (!myList.Contains( aString ))
    {
        myList.Add(aString);
    }
}
于 2012-06-30T07:45:39.737 に答える
4

ArrayList をHashSetに置き換えることができます。ドキュメントから:

The HashSet<T> class provides high performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order.

どうしても ArrayList を使用する必要がある場合は、Linq を使用してDistinctコマンドで重複を削除できます。

var distinctItems = arrayList.Distinct()
于 2012-06-30T07:15:51.120 に答える
3

ArrayList を操作するときにこのコードを使用できます

ArrayList arrayList;
//Add some Members :)
arrayList.Add("ali");
arrayList.Add("hadi");
arrayList.Add("ali");

//Remove duplicates from array
  for (int i = 0; i < arrayList.Count; i++)
    {
       for (int j = i + 1; j < arrayList.Count ; j++)
           if (arrayList[i].ToString() == arrayList[j].ToString())
                 arrayList.Remove(arrayList[j]);
    }
于 2015-04-12T09:30:40.197 に答える
2

可能であれば、 HashSetまたはその他のセット クラスを使用する必要があります。この種の操作では、はるかに効率的です。HashSet の主なデフォルトは、要素の順序が元のリストと同じままであることが保証されていないことです (仕様によっては、問題になる場合とそうでない場合があります)。

それ以外の場合、順序を維持する必要があるが、値を列挙するときに重複を削除するだけでよい場合は、linqのDistinctメソッドを使用できます。パフォーマンスに影響を与えるリスクがあるため、配列リストを変更するたびにこのクエリを実行して結果をコピーしないように注意してください。

于 2012-06-30T07:40:13.000 に答える
1
        Hashtable ht = new Hashtable();
        foreach (string item in originalArray){
            //set a key in the hashtable for our arraylist value - leaving the hashtable value empty
            ht[item] = null;
        }

    //now grab the keys from that hashtable into another arraylist
    ArrayList distincArray = new ArrayList(ht.Keys);
于 2012-09-05T09:08:18.960 に答える
-1

ArrayList を使用する必要がある場合は、Sortメソッドを使用します。これは良いリンク @ Sort Method of ArrayList です。リストがソートされたら、アルゴリズムを使用してすべての要素を反復/比較し、重複を削除します。

楽しむ、

トミー・クウィー

于 2012-06-30T07:23:48.800 に答える