Страница: 1 |
Страница: 1 |
Вопрос: Списки
Добавлено: 17.02.08 21:37
Автор вопроса: Winand | Web-сайт:
Чет никак не врублюсь..
Есть два списка с числами (в двух коллекциях)
-> 1 3 6 9 5
-> 4 9 3 7 5
Мне надо каким-нибудь простым и быстрым способом выделить одинаковые значения в отдельный список
->1 6
->4 7
->3 9 5
как бы это сделать чтобы кода было поменьше? можно без кода, хоть в теории опишите..
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 17.02.08 21:42
кароч на выходе я должен знать какие элементы уникальные в первом/втором списках и какие в них повторяются.
А то моя кривая реализация перестала правильно работать в связи с изменениями в проге. Так я даж не могу понять как оно работает вообще)
Номер ответа: 2
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #2
Добавлено: 17.02.08 22:40
'
Dim c3 As New Collection ' копия c1 с ключами
Dim c4 As New Collection ' результат
'
On Error Resume Next ' выключаем контроль ошибок
'
Dim v
For Each v In c1: c3.Add v, CStr(v): Next v ' клпируем c1 в c3, но с ключами
For Each v In c2
Dim n: n = c3(CStr(v)) ' по ключу пытаемся получить число из c3
If Err Then Err.Clear Else c4.Add v ' если ошибка, стираем ее, если нет, то добавляем число в результат
Next v
'
Set process = c4 ' возвращаем результат
'
End Function
Номер ответа: 3
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #3
Добавлено: 17.02.08 22:43
Если надо еще и уникальные оставить в списках, то в коде после добавления числа в результат, надо добавить удаление числа из c1 и с2.
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 18.02.08 11:23
Интересный "контроль ошибок"...
Номер ответа: 5
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #5
Добавлено: 18.02.08 15:56
Steel Brand, а чего? Не видел никогда?
Номер ответа: 6
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #6
Добавлено: 18.02.08 17:57
Это называется "забить на ошибки"
Номер ответа: 7
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #7
Добавлено: 18.02.08 18:51
да, очень странно сделана работа с ключами. Если ключа нет, то вызывает ошибку. мне не понравилось))
Не знаю насколько вменяемо, но сделал вот так
Мне всё равно не нравится, но зато более понятно
Dim flag As Boolean
For i = 1 To Map.LocVisib(loc).Count
cb.Add Map.LocVisib(loc)(i)
Next i
For i = 1 To Map.LocAvail(loc).Count Step AVA_OPTS_len
cG.Add Map.LocAvail(loc)(i)
Next i
For i = cG.Count To 1 Step -1
For j = cb.Count To 1 Step -1
If cG(i) = cb(j) Then
cGB.Add cG(i)
cb.Remove (j)
flag = True
End If
Next j
If flag Then cG.Remove (i)
flag = False
Next i
For i = 1 To cb.Count
'...
Next i
For i = 1 To cG.Count
'...
Next i
For i = 1 To cGB.Count
'...
Next i
Номер ответа: 8
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #8
Добавлено: 18.02.08 21:49
Называйте хоть как... ) Суть - одна.
В преднамеренном допуске ошибок нет ничего страшного. Это просто на чуток другом уровне программирования далеком от академического.
P.S. А мой код короче ))
Номер ответа: 9
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #9
Добавлено: 19.02.08 01:14
ага, кое-кто через двоеточие любит писать очень))
А вообще да, короче. Спасибо, я про ключи практически ничего не знал
з.ы. Изучение cpp 3.1 сильно влияет на мозг) Я заметил, что как-то более понятный(мне как минимум) код стал получаться