Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: List<T>.Find  (Прочитано 12027 раз)
0 Пользователей и 1 Гость смотрят эту тему.
гайка
Гость
« : 29-03-2012 19:02 » 

ребята, мне нужно выполнить поиск в списке List<>
на msdn нашла пример поиска, но у меня немного другая ситуация:
есть список точек List<Point> points_ и список ячеек List<Cell> Cells. у каждой Cell есть параметры X и Y. так вот нужно среди списка Cells найти ячейки с координатами из списка points_
Код: (C#)
        List<Cell> list_ = new List<Cell>();
        foreach (Point p in points_)
        {
            list_.Add(Cells.Find(HasCoords));
        }
        static bool HasCoords(Cell cell_)
        {
            if(/*...*/)
                 return true;
            else
                 return false;
        }
вопрос: как передать предикату искомое значение Point?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 29-03-2012 19:06 » 

Ааааа держите меня семеро!!!

Гайка, как это называется:

Код: (C#)
        static bool HasCoords(Cell cell_)
        {
            if(/*...*/)
                 return true;
            else
                 return false;
        }

Эт раз.

Два. Лябда-выражения мы же уже проходили. Или?

Ну и три. Что произойдёт, если ничего не найдётся?

зы Ща глянул, там даже код есть. Ага
« Последнее редактирование: 29-03-2012 19:09 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #2 : 29-03-2012 19:09 » 

о, ты тут Улыбаюсь да я уже забыла про эти лямбда-выражения. к тому же, они немного сложноваты для понимания.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 29-03-2012 19:11 » 

Как это не в тему?

Я тебе на днях ссылку давал. Забыла? Или всё "ниасилила"? "Индусский" код?

А с лямбда ты ж сама спросила:
https://forum.shelek.ru/index.php/topic,28409.msg277235.html#msg277235

А потом сказала, что понятно. Если нет давай разбираться.
« Последнее редактирование: 29-03-2012 19:15 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #4 : 29-03-2012 19:16 » 

Джон, ведь есть разные способы реализовать задуманное. я НЕ ХОЧУ делать это через лямбда выражения, именно поэтому я создала эту тему. и сформулировала вопрос именно так. я просто хочу разобраться с таким вот детсадовским способом поиска.
тогда мне было понятно, через 2 недели я уже забыла это.

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

de
Offline Offline
Пол: Мужской

« Ответ #5 : 29-03-2012 19:19 » 

А я такой. Ага

Что значит "НЕ ХОЧУ"? Предикатная ф-я сама получает параметр - объект списка - для это она должна быть соответствующим образом декларирована. Но это не интресно.

А чем тебе лямда не нравится?

Добавлено через 2 минуты и 8 секунд:
Если чё, мы с Витей уже в чате
« Последнее редактирование: 29-03-2012 19:21 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #6 : 29-03-2012 19:24 » 

Джон, моё "НЕ ХОЧУ" так же не аргументируется, как твоё "не интересно" Улыбаюсь
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 29-03-2012 19:43 » 

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

Лямбды проще. Нужно их лишь понять Улыбаюсь

А так MSDN ясно говорит, что аргументом у Find является делегат Predicate<T>, каковой подразумевает наличие функции вида bool f<T>(T x). Думаю, это тривиальная задача написать функцию, которая принимает Cell, извлекает из него что надо и возвращает bool: либо эту ячейку выбрать в результат поиска, либо она не подходит.
« Последнее редактирование: 29-03-2012 20:02 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
гайка
Гость
« Ответ #8 : 29-03-2012 20:24 » 

Dimka, мы уже в чате разобрались.
мне просто было интересно, как провернуть такую штуку функциональным способом. предикат автоматом получает свой параметр, в моем случае - ячейку, а мне нужно передать туда еще и искомое значение Point.
В принципе, я уже использую Лямбда ф-цию, но из чистого любопытства хочу узнать, как это можно было реализовать через функцию-делегат.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 30-03-2012 14:36 » 

Гайка, делегат - это не только указатель на функцию, это указатель на метод экземпляра класса. Соответственно, нужно создать класс, экземпляр которого хранил бы искомый Point, а Find вызывал бы его метод, соответствующий делегату по сигнатуре.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
гайка
Гость
« Ответ #10 : 01-04-2012 11:05 » new

Во, это я и хотела узнать! Спасибо, Дима
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines