Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
Sergej45
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 5
1
.NET 4.x

Удаление повторяющихся элементов в массиве

17.08.2012, 07:34. Просмотров 6384. Ответов 12
Метки нет (Все метки)

Здравствуйте. есть такая задача:
существует объект класса ArrayList в котором хранятся значения даты (12 июня 2012 г.)

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

Попробовал реализовать следующим образом, но метод возвращает массив без удаления дублирующихся значений
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
static object[] RemoveDouble(ArrayList ar)
        {
            
            string year = string.Empty;
            object[] array;
            string result;
            ArrayList yearArray = new ArrayList();
            
            foreach (string str in ar)
            {
                DateTime dt = DateTime.Parse(str);
                year = dt.Year.ToString();
                yearArray.Add(year);
            }
            
            yearArray.Sort();
            result = yearArray[0].ToString();
            
            for (int i = 1; i < ar.Count; i++)
            {
                if (result == yearArray[i].ToString())
                {
                    yearArray.RemoveAt(i);
                    result = yearArray[i].ToString();
                }
            }
            array = yearArray.ToArray();
            return array;
        }
Помогите найти ошибку пожалуйста.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2012, 07:34
Ответы с готовыми решениями:

Удаление повторяющихся элементов в массиве
Подскажите как реализовать удаление одинаковых чисел из массива? чем проще тем лучше Спасибо.

Подсчет и удаление повторяющихся строк в массиве
Здравствуйте, уважаемые форумчане. Требуется ваша помощь. Имеется массив с 1000 фамилий(результаты...

Удаление повторяющихся элементов массива
Ребят, как можно вывести только неповторяющиеся элементы массива двумерного??? using System;...

Удаление повторяющихся элементов в ArrayList
В цикле с помощью Add добавляю строки в массив ArrayList ArrayList temp = new ArrayList(); ...

Удаление повторяющихся элементов в ArrayList
Есть метод в котором открывается файл и далее происходит запись столбцов (но это не важно) ...

12
bob217
11 / 11 / 2
Регистрация: 06.12.2010
Сообщений: 33
17.08.2012, 07:50 2
просто для примера
years - исходный массив с годами
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for(int i = 0; i<years.Lenght;i++)
{
   if(years[j]!="0")
  {
      for(int j = i+1;j<years.Lengt;j++)
      {
         if(years[i]==years[j])
         {
         years[j]=="0";
         }
      }
   }
}
for(int i = 0;i<years.Lenght;i++)
{
   if(years[i]!="0")
   {
      Console.WriteLine(years[i]); или newArrayYears.Add(years[i])
   }
}
не компилировал, но идея думаю понятная. данный метод подойдёт для не очень длинных массивов
0
sashk0
69 / 69 / 7
Регистрация: 14.03.2012
Сообщений: 201
17.08.2012, 08:01 3
Если у вас массив ar, то не логичнее использовать не "i < ar.Count", а свойство lenght, т.е. i < ar.lenght ?

C#
1
2
3
4
5
6
7
8
for (int i = 1; i < ar.Count; i++)
            {
                if (result == yearArray[i].ToString())
                {
                    yearArray.RemoveAt(i);
                    result = yearArray[i].ToString();
                }
            }
Добавлено через 3 минуты
Цитата Сообщение от bob217 Посмотреть сообщение
просто для примера
years - исходный массив с годами
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(int i = 0; i<years.Lenght;i++)
{
   for(int j = i+1;j<years.Lengt;j++)
   {
      if(years[i]==years[j])
      {
      years[j]=="0";
      }
   }
}
for(int i = 0;i<years.Lenght;i++)
{
   if(years[i]!="0")
   {
      Console.WriteLine(years[i]); или newArrayYears.Add(years[i])
   }
}
не компилировал, но идея думаю понятная. данный метод подойдёт для не очень длинных массивов
вот тут ошибка:
C#
1
2
3
4
if(years[i]==years[j])
{
years[j]=="0";
}
вы наверное имели ввиду
C#
1
2
3
4
if(years[i]==years[j])
{
years[j]="0";
}
0
Sergej45
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 5
17.08.2012, 08:06  [ТС] 4
Цитата Сообщение от sashk0 Посмотреть сообщение
Если у вас массив ar, то не логичнее использовать не "i < ar.Count", а свойство lenght, т.е. i < ar.lenght ?
На сколько я помню у объекта класса ArrayList нет такого свойства.
0
sashk0
69 / 69 / 7
Регистрация: 14.03.2012
Сообщений: 201
17.08.2012, 08:09 5
Цитата Сообщение от Sergej45 Посмотреть сообщение
На сколько я помню у объекта класса ArrayList нет такого свойства.
Действительно, прошу прощения, не увидел сразу что это ArrayList
0
bob217
11 / 11 / 2
Регистрация: 06.12.2010
Сообщений: 33
17.08.2012, 08:11 6
sashk0, я просто написал идею, которая первая пришла в голову(пробежались по массиву, сверили грубо говоря, каждый с каждым, занулили повторяющиеся, и добавили в свеженький массив, или лист или, что то там ещё, незанулённые элементы, которые будут уникальные). и да, там будет присвоение, как вы верно подметили.
0
Sergej45
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 5
17.08.2012, 08:15  [ТС] 7
Цитата Сообщение от bob217 Посмотреть сообщение
sashk0, я просто написал идею, которая первая пришла в голову(пробежались по массиву, сверили грубо говоря, каждый с каждым, занулили повторяющиеся, и добавили в свеженький массив, или лист или, что то там ещё, незанулённые элементы, которые будут уникальные). и да, там будет присвоение, как вы верно подметили.
Да идея нормальная, но что вы имели ввиду написав, что данный метод подойдет для массивов небольшых размеров? Если массив будет большой ,то будет потеря в скорости?
0
sashk0
69 / 69 / 7
Регистрация: 14.03.2012
Сообщений: 201
17.08.2012, 08:16 8
попробуйте так сделать

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
static object[] RemoveDouble(ArrayList ar)
        {
            
            string year = string.Empty;
            object[] array;
            string result;
            ArrayList yearArray = new ArrayList();
            
            foreach (string str in ar)
            {
                DateTime dt = DateTime.Parse(str);
                year = dt.Year.ToString();
                yearArray.Add(year);
            }
            
            yearArray.Sort();
            result = yearArray[0].ToString();
            
            foreach(int i in yearArray)
            {
                if (result == yearArray[i].ToString())
                {
                    result = yearArray[i].ToString();                    
                    yearArray.Remove(i);
                }
            }
            array = yearArray.ToArray();
            return array;
        }
0
bob217
11 / 11 / 2
Регистрация: 06.12.2010
Сообщений: 33
17.08.2012, 08:32 9
Цитата Сообщение от Sergej45 Посмотреть сообщение
Да идея нормальная, но что вы имели ввиду написав, что данный метод подойдет для массивов небольшых размеров? Если массив будет большой ,то будет потеря в скорости?
то, что если у тебя будет к примеру 10к элементов, то стоит придумать что то более оптимальное, ну а если 100 штук, то тут похрен на метод. хотя всегда нужно стремится к оптимальному решению)
0
Sergej45
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 5
17.08.2012, 08:32  [ТС] 10
Цитата Сообщение от sashk0 Посмотреть сообщение
попробуйте так сделать


foreach(int i in yearArray)
ругается что указанное приведение является недопустимым
0
sashk0
69 / 69 / 7
Регистрация: 14.03.2012
Сообщений: 201
17.08.2012, 08:38 11
Цитата Сообщение от Sergej45 Посмотреть сообщение
ругается что указанное приведение является недопустимым
тогда foreach(var i in yearArray).

тут ещё наверное нужно перебор сделать не с i, а с i+1 элемента, т.к. мы уже записали значение нулевого элемента массива в переменную.
0
Psilon
Master of Orion
Эксперт .NET
6055 / 4913 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
Завершенные тесты: 4
17.08.2012, 10:34 12
Sergej45, arraylist мне не нравится, поэтому покажу на примере List<DateTime>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication15
{
    class Program
    {
        static void Main()
        {
            var list = new List<DateTime>();
            var k = DateTime.Now;
            for (int i = 0; i < 5; i++)
                list.Add(k);
            foreach (var dateTime in list)
                Console.WriteLine(dateTime.ToString());
            Console.WriteLine("\n\n");
            list = RemoveDoubles(list);
            foreach (var dateTime in list)
                Console.WriteLine(dateTime.ToString());
            Console.ReadKey();
        }
 
        public static List<T> RemoveDoubles<T>(List<T> list)
        {
            var set = new HashSet<T>();
            foreach (var value in list)
                set.Add(value);
            return set.ToList();
        }
    }
}
1
Moldir95
1 / 1 / 0
Регистрация: 26.02.2015
Сообщений: 21
01.04.2015, 15:44 13
сделайте мне пожалуйста такой же код для нелинейного списка
0
01.04.2015, 15:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2015, 15:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Удаление повторяющихся элементов в List<string>
private List&lt;string&gt; _teachers; public List&lt;string&gt; teachers { get...

Удаление повторяющихся элементов из xml файла
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;head&gt; &lt;element id=&quot;0&quot;&gt; &lt;name&gt;1&lt;/name&gt; ...

Удаление повторяющихся элементов из списка(найти ошибку)
Всем привет! Прошу помощи, надо написать функцию удаления всех повторяющихся элементов из списка....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.