В этом посте будет обсуждаться, как проверить наличие заданного элемента в массиве в C#. Решение должно возвращать true, если массив содержит указанное значение; в противном случае ложно.
1. Использование Enumerable.Contains()
метод (System.Linq
)
The Enumerable.Contains() предоставляет простой и понятный способ определить, содержит ли последовательность указанный элемент или нет. Следующий пример демонстрирует использование Contains()
метод:
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 |
using System; using System.Linq; public static class Extensions { public static bool find<T>(this T[] array, T target) { return array.Contains(target); } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
2. Использование Array.Exists()
метод
The Array.Exists() рекомендуемым решением является проверка существования элемента в массиве. В следующем примере кода показано, как это реализовать.
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 |
using System; public static class Extensions { public static bool find<T>(this T[] array, T target) { return Array.Exists(array, x => x.Equals(target)); } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
3. Использование Array.IndexOf()
метод
Другим хорошим решением является использование Array.IndexOf() метод, который возвращает индекс первого вхождения указанного элемента в этот массив и -1
если такого элемента нет.
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 |
using System; public static class Extensions { public static bool find<T>(this T[] array, T target) { return Array.IndexOf(array, target) != –1; } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
4. Использование Array.FindIndex()
метод
Array.FindIndex() возвращает индекс первого элемента, удовлетворяющего предоставленному предикату. Если ни один элемент не удовлетворяет условию, FindIndex
возвращается -1
.
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 |
using System; public static class Extensions { public static bool find<T>(this T[] array, T target) { return Array.FindIndex(array, x => x.Equals(target)) != –1; } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
5. Использование HashSet
HashSet
класс обеспечивает Contains
метод, чтобы определить, содержит ли заданный объект указанный элемент. В следующем примере данный массив преобразуется в набор и вызывается его Contains
метод:
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 |
using System; using System.Collections.Generic; public static class Extensions { public static bool find<T>(this T[] array, T target) { return new HashSet<T>(array).Contains(target); } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
6. Использование Enumerable.Where()
метод (System.Linq
)
The System.Linq.Enumerable.Where() Метод фильтрует последовательность значений на основе предиката. В следующем примере кода показано, как мы можем использовать Where()
чтобы найти первое вхождение указанного элемента в этом массиве.
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 36 37 38 39 40 |
using System; using System.Linq; public static class Extensions { public static bool find<T>(this T[] array, T target) { try { array.Where(i => i.Equals(target)).First(); // или же // array.First(i => i.Equals(target)); return true; } catch (InvalidOperationException) { return false; } } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
Мы можем избежать блока try-catch, установив значение по умолчанию с помощью DefaultIfEmpty()
метод:
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 |
using System; using System.Linq; public static class Extensions { public static bool find(this int[] array, int target) { return (array.Where(i => i.Equals(target)) .DefaultIfEmpty(–1) .First()) != –1; } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
7. Использование Array.FindAll()
метод
Array.FindAll() Метод возвращает массив, содержащий все элементы, соответствующие указанному предикату. Мы можем использовать его следующим образом, чтобы проверить наличие элемента в массиве.
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 |
using System; public static class Extensions { public static bool find<T>(this T[] array, T target) { T[] results = Array.FindAll(array, x => x.Equals(target)); return results.Length > 0; } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
8. Выполнение линейного поиска
Наивное решение состоит в том, чтобы выполнить линейный поиск в заданном массиве, чтобы определить, присутствует ли целевой элемент в массиве.
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 36 37 38 39 |
using System; using System.Collections.Generic; public static class Extensions { public static bool find<T>(this T[] array, T target) { EqualityComparer<T> comparer = EqualityComparer<T>.Default; for (int i = 0; i < array.Length; i++) { if (comparer.Equals(array[i], target)) { return true; } } return false; } } public class Example { public static void Main() { int[] array = { 1, 2, 3, 4, 5 }; int target = 4; bool isExist = array.find(target); if (isExist) { Console.WriteLine(“Element found in the array”); } else { Console.WriteLine(“Element not found in the given array”); } } } /* результат: Element found in the array */ |
Скачать Выполнить код
Это все о поиске элемента в массиве в C#.
Есть переменная, содержащая имя, например:
string name = "Коля";
и массив, содержащий имена, например:
string[] array = { "Коля", "Федя", "Фрося", "Мотя" };
Как проверить, есть ли имя, указанное в переменной, в массиве?
Denis Bubnov
13.9k13 золотых знаков37 серебряных знаков63 бронзовых знака
задан 22 авг 2016 в 7:07
1
Можно сделать несколькими различными способами, к примеру:
string name = "Коля";
string[] array = { "Коля", "Федя", "Фрося", "Мотя" };
// Способ #1
foreach (string str in array)
{
if (str == name)
{
Console.WriteLine(string.Format("Слово '{0}' содержится в массиве", name));
// to do something...
}
}
// Способ #2
if (array.Any(str => str == name))
{
Console.WriteLine(string.Format("Слово '{0}' содержится в массиве", name));
// to do something...
}
// Способ #3
if (array.Contains(name))
{
Console.WriteLine(string.Format("Слово '{0}' содержится в массиве", name));
// to do something...
}
Список полезных ссылок на MSDN для изучения:
- foreach, in (Справочник по C#)
- Enumerable.Any – метод
- String.Contains – метод
- Intersect – метод
ответ дан 22 авг 2016 в 7:21
Denis BubnovDenis Bubnov
13.9k13 золотых знаков37 серебряных знаков63 бронзовых знака
1
Можно воспользоваться классом HashSet
и методом Contains
string name = "Коля";
string[] array = { "Коля", "Федя", "Фрося", "Мотя" };
var hash = new HashSet<string>(array);
if (hash.Contains(name))
{
Console.WriteLine(string.Format("Слово '" + name + "' содержится в массиве"));
//...
}
ответ дан 22 авг 2016 в 7:45
Grundy♦Grundy
79.9k9 золотых знаков76 серебряных знаков133 бронзовых знака
Через LINQ
bool result = array.Any(n => n == name);
ответ дан 22 авг 2016 в 7:16
MirdinMirdin
5,8011 золотой знак21 серебряный знак29 бронзовых знаков
Выяснить, содержит ли массив искомый элемент, или нет, можно с помощью функций
Array.Exists
или Array.IndexOf
:
contains = Array.IndexOf(array, name) != -1;
или
contains = Array.Exists(array, v => v == name);
VladD
206k27 золотых знаков289 серебряных знаков521 бронзовый знак
ответ дан 22 авг 2016 в 7:18
Артём ИонашАртём Ионаш
1,7321 золотой знак21 серебряный знак41 бронзовый знак
Через List<>
(net 2.0)
List<string> lst= new List<string>(array);
bool result = (lst.IndexOf(name) >=0);
можно упростить
((IList<string>)array).IndexOf(name);
ответ дан 22 авг 2016 в 7:19
nick_n_anick_n_a
7,9191 золотой знак21 серебряный знак66 бронзовых знаков
4
using System.Linq;
string name = "Коля";
string[] array = { "Коля", "Федя", "Фрося", "Мотя" };
if (array .Contains(name))
{
Action();
}
Используйте Linq, там есть метод Contains, и как бы получите желаемое + код выглядит более лаконичным.
Если использовать без Linq Conatins, то возможна ошибка(у меня так было + он смотрит на наличие в строке заданной подстроки
ответ дан 5 авг 2021 в 12:47
1
Often you need to search element(s) in an array based on some logic in C#. Use the Array.Find()
or Array.FindAll()
or Array.FindLast()
methods to search for an elements that match with the specified condition.
Array.Find()
The Array.Find()
method searches for an element that matches the specified conditions using predicate delegate, and returns the first occurrence within the entire Array.
public static T Find<T>(T[] array, Predicate<T> match);
As per the syntax, the first parameter is a one-dimensional array to search and the second parameter is the predicate deligate which can be a lambda expression.
It returns the first element that satisfy the conditions defined by the predicate expression; otherwise, returns the default value for type T.
The following example finds the first element that matches with string “Bill”.
string[] names = { "Steve", "Bill", "Bill Gates", "Ravi", "Mohan", "Salman", "Boski" };
var stringToFind = "Bill";
var result = Array.Find(names, element => element == stringToFind); // returns "Bill"
The following example returns the first element that starts with “B”.
string[] names = { "Steve", "Bill", "Bill Gates", "James", "Mohan", "Salman", "Boski" };
var result = Array.Find(names, element => element.StartsWith("B")); // returns Bill
The following example returns the first element, whose length is five or more.
string[] names = { "Steve", "Bill", "James", "Mohan", "Salman", "Boski" };
var result = Array.Find(names, element => element.Length >= 5); // returns Steve
Notice that the Array.Find()
method only returns the first occurrence and not all matching elements. Use the Array.FindAll()
method to retrieve all matching elements.
Array.FindAll()
The Array.FindAll()
method returns all elements that match the specified condition.
public static T[] FindAll<T>(T[] array, Predicate<T> match)
As per the syntax, the first parameter is a one-dimensional array to search and the second parameter is the predicate deligate which can be a lambda expression.
It returns all the elements that satisfy the condition defined by the predicate expression.
The following example finds all elements that match with “Bill” or “bill”.
string[] names = { "Steve", "Bill", "bill", "James", "Mohan", "Salman", "Boski" };
var stringToFind = "bill";
string[] result = Array.FindAll(names, element => element.ToLower() == stringToFind); // return Bill, bill
The following example finds all elements that start with B.
string[] names = { "Steve", "Bill", "James", "Mohan", "Salman", "Boski" };
string[] result = Array.FindAll(names, element => element.StartsWith("B")); // return Bill, Boski
The following example finds all elements whose length is five or more.
string[] names = { "Steve", "Bill", "James", "Mohan", "Salman", "Boski" };
string[] result = Array.FindAll(names, element => element.Length >= 5); // returns Steve, James, Mohan, Salman, Boski
Array.FindLast()
The Array.Find()
method returns the first element that matches the condition. The Array.FindLast()
method returns the last element that matches the specified condition in an array.
public static T FindLast<T>(T[] array, Predicate<T> match)
As per the syntax, the first parameter is a one-dimensional array to search and the second parameter is the predicate deligate which can be a lambda expression.
It returns the last element that satisfy the condition defined by the predicate expression. If not found then returns the default value for type T.
The following example finds the last element that matches with “Bill”.
string[] names = { "Steve", "Bill", "Bill Gates", "Ravi", "Mohan", "Salman", "Boski" };
var stringToFind = "Bill";
var result = Array.FindLast(names, element => element.Contains(stringToFind)); // returns "Boski"
The following example returns the last element that starts with “B”.
string[] names = { "Steve", "Bill", "James", "Mohan", "Salman", "Boski" };
var result = Array.FindLast(names, element => element.StartsWith("B")); // returns Boski
The following example returns the first element, whose length is five or more.
string[] names = { "Steve", "Bill", "Bill Gates", "James", "Mohan", "Salman", "Boski" };
result = Array.FindLast(names, element => element.Length >= 5); // returns Boski
Thus, choose the appropriate method as per your requirement to search for an element in an array in C#.
В языке Си Шарп проверку на вхождения числа или символа в массив вы можете двумя способами. Причем в языке Си Шарп не важно дробного или целого типа данный массив.
Эти 2 способа работают для всех типов данных:
1. Вы можете написать небольшую функцию, которая принимает значение и массив и проверяет вхождения. Код данной метода следующий:
Код объявление массива и переменной в C# и вызова метода:
int chislo = 6; int[] masiv = new int[5] { 4, 3, 6, 5, 1 }; if (func(chislo, masiv) == -1) MessageBox.Show("Число" + chislo + " не входит в массив");
Метод:
private int func(int chislo, int[] masiv) { for(int k = 0; k< masiv.Length; k++) { if (chislo == masiv[k]) return 1; } return -1; }
2. Второй метод проще в написании. Вам необходимо вызвать готовый метод System.Array.IndexOf. Пример вызова проверки вхождение числа в массив на Си Шарп:
int chislo = 6; int[] masiv = new int[5] { 4, 3, 6, 5, 1 }; int index = System.Array.IndexOf(masiv, chislo ); if (index < 0) MessageBox.Show("Число" + chislo + " не входит в массив");
Вот таким образом осуществляется в языке Си Шарп проверка вхождения числа в массив.
Проверка вхождения числа в массив: Справочник по C#
0.00 (0%) 0 votes
Rusya19 0 / 0 / 0 Регистрация: 17.06.2018 Сообщений: 34 |
||||
1 |
||||
Поиск определенного числа в массиве, вывести на какой позиции находится этот элемент08.09.2018, 17:07. Показов 5014. Ответов 3 Метки нет (Все метки)
Здравствуйте, задание вроде не сложное, но не получается вывести позицию элемента, вот код
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
08.09.2018, 17:07 |
Ответы с готовыми решениями: Напишите программу, которая определит какой элемент находится на позиции k В массиве вычислить минимальный парный элемент, который находится на непарной позиции Найти нулевой(ые) элемент(ы) в матрице, вывести на пересечение какой строки и столбца располагается(ются) этот(эти) элемент(ы) Поиск определенного числа в массиве 3 |
zivco 2 / 1 / 1 Регистрация: 22.04.2018 Сообщений: 2 |
||||
08.09.2018, 17:20 |
2 |
|||
Сообщение было отмечено Rusya19 как решение РешениеУ Вас ошибка была в сравнении элементов. Вы сравнивали введенное число с позицией элемента, а не с самим элементом. И еще, вам не нужно считать позицию числа, для этого есть переменная j
0 |
Rusya19 0 / 0 / 0 Регистрация: 17.06.2018 Сообщений: 34 |
||||
08.09.2018, 18:23 [ТС] |
3 |
|||
на этой строчке вылетает программа “Индекс находился вне границ” Добавлено через 6 минут Добавлено через 3 минуты
0 |
Элд Хасп Модератор 13780 / 9992 / 2661 Регистрация: 21.04.2018 Сообщений: 29,762 Записей в блоге: 2 |
||||
08.09.2018, 19:05 |
4 |
|||
0 |