Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > VB .NET > Поиск в массиве |
Автор: timich 5.3.2009, 03:56 | ||
Подскажите пожалуйста, как нужно искать числа в массиве. Допустим на этом примере.
|
Автор: -Mikle- 5.3.2009, 09:05 | ||
Принцип тот же:
Подробнее тут: http://msdn.microsoft.com/ru-ru/library/d9hy2xwa.aspx http://msdn.microsoft.com/ru-ru/library/2857xz7b.aspx http://msdn.microsoft.com/ru-ru/library/system.array.findindex.aspx http://msdn.microsoft.com/ru-ru/library/system.array.findlastindex.aspx http://msdn.microsoft.com/ru-ru/library/1kkxfxdd.aspx |
Автор: diadiavova 5.3.2009, 12:43 | ||
Немного дополню ответ. Помимо указанных функций есть ещё функция Contains, при чём есть такой метод пришедший из интерфейса System.Collections.Generic..::.ICollection<(Of <(T>)>) , что даёт возможность его использовать в начиная с 8 версии языка, но в последней версии появился такой же расширяющий метод System.Linq.Enumerable.Contains(Of TSource), который добавляется ко всем типам, реализующим интерфейс IEnumerable. Если надо проверять наличие сразу нескольких элементов, то целесообразно использовать собственный метод-расширитель
В данном примере я добавил к массиву метод ContainsAll, который проверяет наличие всех, переданных ему, аргументов и возвращает True, если они все присутствуют в массиве, если хоть какой-нибудь отсутствует, то метод возвратит False, что и рподемострированно примером. |
Автор: -Mikle- 5.3.2009, 13:00 |
diadiavova, очень хороший пример! (+1) ![]() |
Автор: timich 5.3.2009, 13:12 |
Даааа... Мне это надо неделю переваривать ![]() Спасибо! Попробую разобраться. Кстати, а на моем примере допишите нужные строки плиз. |
Автор: diadiavova 5.3.2009, 14:02 | ||||
Просмотрел свой пример и нашёл пару слабых мест: 1. Если методу ContainsAll не передавать аргументы, то он возвратит True, хотя, по логике вещей должно быть наоборот. Решить проблему можно двумя способами, либо осуществлять проверку этого обстоятельства в коде, либо один аргумент сделать обязательным(этот мне нравится больше). 2.Если среди аргументов попался хотя бы один, отсутствующий в массиве, то дальнейший их перебор бессмысленен. Приведу исправленный вариант
Кроме того: есть смысл добавить его к ко всему, что реализует IEnumerable.
Естественно, при этом модуль, описанный выше должен существовать в проекте и если он размещён в другом пространстве имён, то это пространство должно быть импортировано в ту часть кода, где ты его хочешь использовать. Точне, модуль необязательно должен находиться в том же проекте, но пространство импортировать надо. Добавлено через 6 минут и 32 секунды Thx |
Автор: -Mikle- 5.3.2009, 14:13 |
Лучше будет, если ты сам допишешь, так ты по крайней мере хоть немного привыкнешь. А по поводу то тебе дорога в МСДН, там все довольно доступно расписано про Extension методы. На самом деле это не сложнее, чем просто методы, которые ты уже знаешь... http://msdn.microsoft.com/ru-ru/library/bb384936.aspx Добавлено через 3 минуты и 36 секунд Упс... опоздал... А я вот даже не стал проверять твой код, на слово поверил ![]() ![]() |
Автор: diadiavova 5.3.2009, 14:18 |
Ну я же исправился ![]() |
Автор: timich 7.3.2009, 00:38 |
Все работает классно! Спасибо! Применил пример от diadiavova, но если честно, то конечно не абсолютно все понятно, но продолжаю изучать ![]() |
Автор: diadiavova 7.3.2009, 00:40 |
А что конкретно не ясно, сам алгоритм или ещё что-то? |
Автор: timich 7.3.2009, 00:56 |
Не понятно , например что такое <Extension()> в принципе. В мсдн объяснения для программистов, а не для новичков))) Потом, что такое Т и тоже в принципе. Ради интереса пробовал менять на другую букву, не знаю зачем но так просто))) Это тоже ByVal ParamArray elems() As T Вообще , не знаю плохо это или хорошо, не знакомый код несколько раз просматриваю в пошаговой работе, очень помогает. А в алгоритме вроде бы ясно все. |
Автор: timich 7.3.2009, 05:53 |
Ну так намного легче ![]() Большое спасибо! |