С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
1

Оптимизация кода

30.09.2016, 13:19. Показов 2666. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Имею такую задачу: проходиться по коллекции файлов, и проводить фильтр по определённым условиям. Причём условия формируются непосредственно перед проходом по всем файлам.
Выглядит сейчас это примерно так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  foreach (string f in FileList.MainList)
{
  // max размер подходит?
 if (max_size != 0)
continue ;
 
  // min размер подходит?
 if (min_size != 0)
continue ;
 
  // Имя файла 
  if (filenameYES!=null || filenameNO!=null)
continue;
 
  // Имя папки  
if (pathnameYES != null || pathnameNO != null)
continue;
}
max_size,min_size,filenameYES,filenameNO и другие условия определяются ДО прохода по всем файлам. Для того чтобы ускорить выполнение кода, мне как-то нужно вывести проход по всем файлам в отдельный метод, и вызывать этот метод уже только с теми условиями, которые определены. То есть чтобы в каждом файле программа не думала какие условия заданы, а сразу проверяла только заданные условия. Просьба подсказать как сие осуществить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2016, 13:19
Ответы с готовыми решениями:

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

Оптимизация кода
Доброй ночи! Подскажите, пожалуйста, или приведите пример как упростить этот код. Программа должна...

Оптимизация кода
Есть кусок кода: public static void NOCH (object source, ElapsedEventArgs e) { ...

Оптимизация кода
Console.WriteLine("Нажми Enter для старта..."); // баги: 1. после вывода примера если нажать enter...

8
.NET senior
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
30.09.2016, 13:26 2
Ну и в чём проблема? в метод передаёте FileList.MainList и параметры фильтрации, внутри метода организуете цикл по MainList и, если текущий элемент удовлетворяет условиям - добавляете его в новый список, который потом из метода возвращаете.
0
Неадекват
1496 / 1233 / 247
Регистрация: 02.04.2010
Сообщений: 2,804
30.09.2016, 13:36 3
Сформируйте лямбду (Expression<Func<T, bool>>) и примените ее к коллекции через where.
0
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
30.09.2016, 14:04  [ТС] 4
bax_tang, спасибо. Проблема, видимо, в том, что я не совсем представляю себе как в метод передать параметры фильтрации. Мне бы пример
0
.NET senior
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
30.09.2016, 14:52 5
Antykus, пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public List<SomeType> Search(List<SomeType> sourceList, int param1, string param2, ...)
{
    List<SomeType> result = new List<SomeType>(sourceList.Count / 4);
 
    for (int index = 0; index < sourceList.Count; ++index)
    {
         SomeType current = sourceList[index];
         if (current.Value1 == param1 && current.Value2 == param2 && ...)
         {
             result.Add(current);
         }
    }
 
    return result;
}
0
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
30.09.2016, 15:42  [ТС] 6
bax_tang, мне нужно чтобы в строке
C#
1
public List<SomeType> Search(List<SomeType> sourceList, int param1, string param2, ...)
программа сама поняла необходимость наличия параметров, и в случае отсутствия такой необходимости в определённом параметре, этого параметра в методе не было. Например, перед проходом по всем файлам путём вычислений понимаем, что param2 проверять в файлах не нужно, тогда строка должна выглядеть так
C#
1
public List<SomeType> Search(List<SomeType> sourceList, int param1,  ...)
0
.NET senior
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
30.09.2016, 15:54 7
Antykus, а каким тогда образом Вы собираетесь проверять условия внутри метода? писать несколько перегрузок - не вариант, params object[] - тоже решение не очень красивое.
0
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
30.09.2016, 16:06  [ТС] 8
bax_tang, так в этом и вопрос, как это сделать грамотно) Я пока не богат глубокими знаниями в разработке, к сожалению
0
Неадекват
1496 / 1233 / 247
Регистрация: 02.04.2010
Сообщений: 2,804
30.09.2016, 16:40 9
Antykus, Вот пример с заранее прописанными условиями, но ничто не мешает формировать предикат динамически.

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
33
34
35
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication13
{
    public enum Condition
    {
        Condition1,
        Condition2,
    }
 
    public class SourceClass
    {
        public int Id { get; set; }
        public string Field1 { get; set; }
        public DateTime Field2 { get; set; }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            var source = new List<SourceClass>();
            var condition = Condition.Condition1;
 
            Func<SourceClass, bool> predicate = x => false;
 
            if (condition == Condition.Condition1) predicate = x => x.Id > 0 && !string.IsNullOrEmpty(x.Field1);
            if (condition == Condition.Condition2) predicate = x => x.Field2 > DateTime.Now.AddDays(-3);
 
            var filteredSource = source.Where(predicate);
        }
    }
}
0
30.09.2016, 16:40
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2016, 16:40
Помогаю со студенческими работами здесь

Оптимизация кода
Как можно красиво зарефакторить следующий код? int a; int b; ...

Оптимизация кода
Есть такая статья http://habrahabr.ru/post/165729/. Но в ней перечислена лишь малая часть возможных...

Оптимизация кода
Возможно ли заменить быдло-код проверки - пуста ли строка и появления картинки возле неё? ...

Оптимизация кода
Добрый. Помогите пожалуйста оптимизировать следующий участок кода: public static int...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru