Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/137: Рейтинг темы: голосов - 137, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 71

Как удалить повторяющиеся элементы динамического массива?

25.06.2013, 10:38. Показов 26992. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Массиву меняем размер равный количеству заполненных ячеек в столбце "А", на листе2!
Нужно удалить повторяющиеся значения!
Вот часть кода для заполнения массива.

Visual Basic
1
2
3
4
 ReDim intArr(intcount_cell) 'Меняем размер массива
  For int_i = 1 To intcount_cell
   intArr(int_i) = Cells(int_i, 1).Value 'Заполняем массив данными из ячеек на 2 листе
  Next int_i
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2013, 10:38
Ответы с готовыми решениями:

Из массива z(15) удалить все повторяющиеся элементы
т.е. в получившемся массиве все элементы должны быть уникальными. Помогите плиз! Очень нужно (использовать сортировку массивов)

Из массива Z[15] вещественных чисел удалить все повторяющиеся элементы
Написать программу. Из массива Z вещественных чисел удалить все повторяющиеся элементы.

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

14
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
25.06.2013, 10:49
Не нужно заполнять повторяющимися, тогда и не надо удалять. В 2010 часто применяют Advanced Filter. Можно через словарь. Но нужно смотреть по набору конкретных критериев.
0
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 71
25.06.2013, 10:57  [ТС]
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Не нужно заполнять повторяющимися, тогда и не надо удалять. В 2010 часто применяют Advanced Filter. Можно через словарь. Но нужно смотреть по набору конкретных критериев.
Делал через стандартную функцию "RemoveDuplications", но сказали чтобы я удалил повторяющиеся эл-ты именно через массив!
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
25.06.2013, 12:28
Они, вобщем, правы. Удалить всегда легко.
Тогда отсортируйте, и идите снизу вверх. Что-то так:
Visual Basic
1
2
3
4
5
6
7
j=1:   redim marr(1 to  j):  marr(j)=cells([номер последнего ряда], "A")
for i = a to b step -1
   if cells(i-1, "A").value <> cells(i, "A").value then
      j=j+1:   Redim Preserve mARR(1 to j)
      mARR(j)=cells(i-1, "A").value
   enf if
next 'i
Но это долго и нудно. Словарь (например) быстро и весело.

Добавлено через 49 минут
Я Вам неправильно сказал. Спутал удалени (тогда снизу) с копированием (тогда не обязательно). Потому на перекуре сделал. Будьте внимательные. Что б ст.А не изменился - я его залил в ст.С (у Вам там могут быть данные - тогда поменяйте). Дальше работаю с ст.С и результат - тоже в ст.С. !!! Но как это долго и неинтересно !!!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub aqaqaq()
Dim i&, j&, r&, mARR()
   mARR = Range([a1], Cells(Rows.Count, 1).End(xlUp)).Value
   Columns("c").ClearContents:   r = UBound(mARR, 1)
   Cells(1, "C").Resize(r, UBound(mARR, 2)).Value = mARR
   Erase mARR 
      With Range("c1:c" & Cells(Rows.Count, "c").End(xlUp).Row)
         .Sort .Cells(1), xlAscending, Header:=xlNo
            For i = 1 To r
               If .Cells(i + 1).Value <> .Cells(i).Value Then
                  j = j + 1: ReDim Preserve mARR(1 To j): mARR(j) = .Cells(i + 1).Value
               End If
            Next
         .ClearContents:  .Cells(1).Resize(UBound(mARR, 1)).Value = _
                                                    Application.Transpose(mARR)
      End With
   Erase mARR:   MsgBox Space(10) & "D O N E!"
End Sub
Добавлено через 21 минуту
Армагедон! Я строчку пропустил. Что-то у меня с утра получается не на те педали нажимать! Ниже .Sort .Cells(1),... вставьте:
j = 1: ReDim mARR(1 To j): mARR(j) = .Cells(1).Value
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
25.06.2013, 18:28
Как-то глупо всё... Это не относится к коду Игоря
Как это "через массив"? Цикл в цикле каждое новое проверять - а не было ли уже взято?
Проще и быстрее набрать словарь, затем ключи использовать как уже готовый массив.
Или перебром набрать коллекцию (с ключами), затем объявить какой нужно массив и переложить.

Добавлено через 4 минуты
Или взять всё в массив (без перебора), объявить такой же пустой, перебором отобрать уникальные, используя как индикатор словарь или коллекцию, выгрузить полученное на лист (в зависимости от задачи весь или заполненную часть, на новое место или поверх исходных данных).
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
25.06.2013, 18:43
Цитата Сообщение от Hugo121 Посмотреть сообщение
Проще и быстрее набрать словарь
- а если словаря нет? Вот так и отучаемся программировать и приучаемся использовать готовое.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
25.06.2013, 19:51
Нет, это не удачно. Можно договориться, что и редактора нет. И вобще для расчетов нужно ручку крутить. Вот для такого простого - достаточно Advanced Filter больше чем аж-аж - спорить тяжело. Скорее, преподы немного не додумали с примером (или сходу - бабах!)

Добавлено через 7 минут
Еще раз посмотрел условие. Если там самое главное именно удалить, тогда, Trojan52, извиняюсь. Сейчас что-то придумаем.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
25.06.2013, 20:00
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Можно договориться, что и редактора нет.
- не утрируйте. Редактор к алгоритмам отношения не имеет. Ручка - тем более.

А теоретический вопрос остается: какова вычислительная сложность алгоритма, который из входного потока целых запоминает уникальные? Если запоминать все, потом сортировать и выбрасывать, то O(n2). Можно проверять каждый приходящий элемент
на уникальность. Какова сложность в этом случае? Тоже O(n2) или меньше?
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
25.06.2013, 20:09
Синтетика... Болезненное это какое-то (мой вариант с удалением)...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub deleteDUBL()
Dim i&, j&, r&, mARR(), tmpARR(), counter&
   mARR = Range([a1], Cells(Rows.Count, 1).End(xlUp)).Value
   Application.ScreenUpdating = False
   Columns("c").ClearContents
   Cells(1, "C").Resize(UBound(mARR, 1), UBound(mARR, 2)).Value = mARR
   For i = LBound(mARR, 1) To UBound(mARR, 1)
      counter = 0
      For j = Cells(Rows.Count, "c").End(xlUp).Row To 1 Step -1
         If Cells(j, "c").Value = mARR(i, 1) Then
            counter = counter + 1
               If counter > 1 Then Cells(j, "c").Delete Shift:=xlUp
         End If
      Next 'j
   Next 'i
   Application.ScreenUpdating = True
   Erase mARR:   MsgBox Space(10) & "D O N E!"
End Sub
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
25.06.2013, 20:09
Первый пришедший элемент сравнивать ни с чем не нужно, второй элемент - одно сравнение, третий - 2 сравнения и т.д. Общее число сравнений 1+2+3+...(n-1)=(n-1)*n/2 что тоже дает O(n2).
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
25.06.2013, 20:11
Я не знаю, я практик
Если нет словаря - используем коллекцию. Уж она то есть всегда.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
25.06.2013, 20:14
Заинтриговали. Но не понял "...второй элемент - одно сравнение, третий - 2 сравнения..." Или Вы имеете ввиду не удаление, а запись в массив?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
25.06.2013, 20:18
Удаление из массива дубликатов:

Visual Basic
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
33
34
35
Function getUniq(A() As Integer) As Integer()
Dim R() As Integer
    n& = UBound(A, 1)
    ReDim R(1 To n&) As Integer
    o& = 0
    For i& = 1 To n&
        X% = A(i&)
        q% = 0
        For j& = 1 To o&
            If R(j&) = X% Then
               q% = -1
               Exit For
            End If
        Next j&
        If q% = 0 Then
           o& = o& + 1
           R(o&) = X%
        End If
    Next i&
    ReDim Preserve R(1 To o&) As Integer
    getUniq = R
End Function
 
Sub Test2()
Dim X(1 To 100) As Integer
Dim R()         As Integer
    Randomize
    For i% = 1 To 100
        X(i%) = 10 * Rnd
    Next i%
    R = getUniq(X)
    For i% = 1 To UBound(R, 1)
        Debug.Print R(i%)
    Next i%
End Sub
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
25.06.2013, 20:28
Совсем другое дело! Но все-таки массив, не удаление.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
25.06.2013, 20:36
Да сложность-то квадратичная...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2013, 20:36
Помогаю со студенческими работами здесь

Как удалить из массива повторяющиеся элементы?
Как это сделать?

Как удалить из исходного массива не повторяющиеся элементы?
Вводится длина одномерного массива и значения его элементов. Удалить из исходного массива уникальные (не повторяющиеся) элементы. Результат...

Заменить на 0 все повторяющиеся элементы динамического массива
Сформировать динамический одномерный массив и заполнить его случайными числами.Заменить на 0 все повторяющейся елементы.

Как удалить повторяющиеся элементы с массива и вывести их на экран
Массив не сортированный, вбивается с клавиатуры. Вписываются только положительные числа, когда вбиваешь любое отрицательное число вывод...

Как удалить элементы динамического массива, а не сам массив?
Всем здравствуйте и помогите пожалуйста разобраться. Как удалить элементы динамического массива, а не сам массив? Если что, вот пример...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru