2013-04-01 5 views
0

У меня есть arraylist «Templist» после некоторого момента времени, когда я увидел, что в arraylist добавлено много повторяющихся значений, поэтому я решил удалить дубликаты. Когда я нашел googled, я нашел некоторые решения, но большинство из них сбивают с толку. В некоторых случаях, когда он говорит сортировать арралиста и находить и удалять дубликаты, где говорится, чтобы использовать разные, где-то говорящие использовать хеш-лист. В любом случае я не хочу заменять Arraylist некоторыми другими структурами. Может ли кто-нибудь предоставить мне логику, чтобы предотвратить дублирование от арраиста?Удаление дубликатов записей от arralist

Код, который в настоящее время я имею в

public class Templist : ArrayList 
{ 
    //some logic behind arraylist 
}      Templist items = new Templist(); 

         if (!(obj is Testobject) && !(obj is Leafobject)) 
         { 
          items.Add(obj); 
         } 


        if (items.Count > 0) 
        { 
         SSendObjectCollection(items); 
        } 

       static public void SendObjectCollection(Templist col) 
       { 
        try 
        { 
         col.Sort(); 
        } 
        catch(System.Exception exception) 
        { 
        } 

       } 

UPDATE

я сделал этот код

public static string[] RemoveDuplicates(string[] s) 
{ 
    HashSet<string> set = new HashSet<string>(s); 
    string[] result = new string[set.Count]; 
    set.CopyTo(result); 
    return result; 
} 

Тогда я назвал в exisitng функции SendObjectCollection() как RemoveDuplicates(col); но он бросает ошибки, может ли любое тело направлять меня, что такое g здесь неправильно?

+8

Несколько вопросов: Вы работали из *, где * дубликатами приходят? Вы не дали нам никакого контекста. Почему вы используете 'ArrayList' в первую очередь? (Общие коллекции почти всегда предпочтительны.) Почему вы * выписываете * из 'ArrayList'? (Получение собственной коллекции из существующих - это почти всегда плохая идея.) –

+0

@Jon Skeet duplicate получает метод SendObjectCollection, этот arralist настроен arralist, я изменю вопрос – vettori

+0

Пожалуйста, прочитайте http://tinyurl.com/so -list, когда вы это делаете –

ответ

3

Есть две проблемы, которые вам необходимо решить. Во-первых, вы должны удалить повторяющиеся значения с помощью:

myArray = new Arraylist(myArray.Distinct().ToArray()); 

и проверки дубликатов, прежде чем добавить значение в список массива:

if(myArray.indexOf("value") == -1) {myArray.Add("value");} 

Надежда эта помощь

+0

Или 'myArray.Contains (" value ")' – Corak

+0

@Phong Vo обновил мой вопрос – vettori

+0

@Phong Vo можно изменить на основе моего вопроса, я не получаю метод Distinct(), даже если я добавил system.Linq namespace – vettori

1

Пожалуйста, включите дополнительную информацию, как где вы добавьте элемент в ArrayList. Во всяком случае, вы можете использовать

ArrayList.Contain(somevalue) 

проверить, существует ли он в ArrayList, прежде чем добавить, чтобы избежать дублирования

+0

обновил мой вопрос – vettori

+0

если (! (Объект является TestObject) &&! (Объект является Leafobject) && ArraList.indexOf (объект) == -1) Это поможет вам избежать дублирования –

+0

будет эта работа, потому что я собирающий много из значений дубликатов, поэтому я сомневаюсь, что это предотвратит только первый набор значений только – vettori

Смежные вопросы