C#

Помогите сделать фильтрацию массива в С#

Calil Axmedov
Calil Axmedov
1 484
 using System; 
using System.Collections.Generic;
using System.Windows.Forms;

namespace ArrayFilter {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}

private void FilterButton_Click(object sender, EventArgs e) {
// Получаем значения из текстовых полей
string[] originalArrayStrings = OriginalArrayTextBox.Text.Split(' ');
string[] filterArrayStrings = FilterArrayTextBox.Text.Split(' ');

// Преобразуем строки в целые числа
int[] originalArray = Array.ConvertAll(originalArrayStrings, int.Parse);
int[] filterArray = Array.ConvertAll(filterArrayStrings, int.Parse);

// Фильтруем массив
int[] resultArray = FilterArray(originalArray, filterArray);

// Выводим результат на экран
ResultLabel.Text = "Результат работы метода:\n" + String.Join(" ", resultArray);
}

public static int[] FilterArray(int[] originalArray, int[] filterArray) {
// Создаем новый список для хранения элементов оригинального массива, которых нет в массиве для фильтрации
List resultList = new List();

// Проходим по всем элементам оригинального массива
foreach (int num in originalArray) {
// Если элемента нет в массиве для фильтрации, добавляем его в список
if (!filterArray.Contains(num)) {
resultList.Add(num);
}
}

// Возвращаем результат в виде массива
return resultList.ToArray();
}
}
}
В этом примере мы создаем главную форму MainForm, содержащую текстовые поля для ввода оригинального массива и массива для фильтрации, кнопку "Фильтровать" и метку ResultLabel для вывода результата. При нажатии на кнопку "Фильтровать" вызывается метод FilterButton_Click(), который получает значения из текстовых полей, преобразует их в целые числа и вызывает метод FilterArray() для фильтрации массива. Затем результат выводится на экран в метке ResultLabel.
СК
Сергей Кадочников
3 316
Лучший ответ
Calil Axmedov спасибо вы мне очень помогли
Calil Axmedov я немного переделала ваш код и отправляю его для тех "несчастных" кто мучается так же как и я )))) ВСЕ РАБОТАЕТ!!!!
В данной задаче:
//Напишите метод, фильтрующий массив на основании переданных параметров.Метод принимает параметры:
//оригинальный_массив, массив_с_данными_для_фильтрации.
//Метод возвращает оригинальный массив без элементов, которые есть в массиве для фильтрации.

От тебя требовалось написать единственныю строку:

 static T[] FilterOut(T[] InitialArray, T[] FilterOutArray) where T : IEquatable => InitialArray.Where(x => !FilterOutArray.Contains(x)).ToArray(); 
Программа, если вдруг тебе хочется этот метод проверить, тоже состоит из единственной строки, а не всего того ужаса, который ты там наворотила:

 Console.WriteLine(FilterOut(new int[] { 1, 2, 6, -1, 88, 7, 6 }, new int[] { 6, 88, 7 }).Aggregate(string.Empty, (x, y) => x += y.ToString() + " ")); 
Calil Axmedov спасибо. я только учусь. )))
Для фильтрации массива в С# можно использовать методы LINQ.

Пример фильтрации массива строк по заданному условию:

```csharp
string[] words = { "apple", "banana", "cherry", "date", "elderberry", "fig" };

string[] filteredWords = words.Where(w => w.Length > 5).ToArray();

// Результат: {"banana", "cherry", "elderberry"}
```

В этом примере мы создаем массив строк и фильтруем его, оставляя только те строки, которые имеют длину больше 5 символов.

Метод `Where` принимает лямбда-выражение, которое определяет условие фильтрации. В данном случае мы используем `w => w.Length > 5`, что означает "выбрать только те элементы, у которых длина больше 5".

После фильтрации мы вызываем метод `ToArray`, чтобы преобразовать отфильтрованные результаты обратно в массив.
Олег Потапов
Олег Потапов
1 887
Calil Axmedov Вот мой код https://pastebin.com/CxXzz7DL посмотрите пожалуйста
Конечно, вот пример кода для фильтрации массива в C# по определенному условию:

```csharp
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] evenNumbers = numbers.Where(n => n % 2 == 0).ToArray();
```

В этом примере мы создали массив из чисел от 1 до 10, а затем использовали метод `Where` для выбора только четных чисел. Результатом будет новый массив `evenNumbers`, содержащий только 2, 4, 6, 8 и 10.

Также, можно использовать другие методы LINQ для фильтрации массивов в C#. Например:

```csharp
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] smallNumbers = numbers.TakeWhile(n => n <= 5).ToArray();
```

В этом примере метод `TakeWhile` выберет только первые 5 элементов массива `numbers`, так как они меньше или равны 5. Результатом будет новый массив `smallNumbers`, содержащий только 1, 2, 3, 4 и 5.
Calil Axmedov Вот мой код https://pastebin.com/CxXzz7DL посмотрите пожалуйста
Calil Axmedov спасибо