別のデータベースからの値を含む1つの配列リストがありますが、重複する値がいくつか保存されているため、重複する値を削除して一意の値のみを配列リストに保存したいと考えています。
これはどのように行うことができますか?
別のデータベースからの値を含む1つの配列リストがありますが、重複する値がいくつか保存されているため、重複する値を削除して一意の値のみを配列リストに保存したいと考えています。
これはどのように行うことができますか?
別の方法を試してみましょう。重複を削除する代わりに、重複を追加しないようにします。これは、ご使用の環境ではより効率的である可能性があります。サンプルコードは次のとおりです。
ArrayList<String> myList = new ArrayList<string>();
foreach (string aString in myList)
{
if (!myList.Contains( aString ))
{
myList.Add(aString);
}
}
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()
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]);
}
可能であれば、 HashSetまたはその他のセット クラスを使用する必要があります。この種の操作では、はるかに効率的です。HashSet の主なデフォルトは、要素の順序が元のリストと同じままであることが保証されていないことです (仕様によっては、問題になる場合とそうでない場合があります)。
それ以外の場合、順序を維持する必要があるが、値を列挙するときに重複を削除するだけでよい場合は、linqのDistinctメソッドを使用できます。パフォーマンスに影響を与えるリスクがあるため、配列リストを変更するたびにこのクエリを実行して結果をコピーしないように注意してください。
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);
ArrayList を使用する必要がある場合は、Sortメソッドを使用します。これは良いリンク @ Sort Method of ArrayList です。リストがソートされたら、アルゴリズムを使用してすべての要素を反復/比較し、重複を削除します。
楽しむ、
トミー・クウィー