Как найти число в массиве си шарп

В этом посте будет обсуждаться, как проверить наличие заданного элемента в массиве в 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's user avatar

Denis Bubnov

13.9k13 золотых знаков37 серебряных знаков63 бронзовых знака

задан 22 авг 2016 в 7:07

Side Kick's user avatar

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 для изучения:

  1. foreach, in (Справочник по C#)
  2. Enumerable.Any – метод
  3. String.Contains – метод
  4. Intersect – метод

ответ дан 22 авг 2016 в 7:21

Denis Bubnov's user avatar

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's user avatar

GrundyGrundy

79.9k9 золотых знаков76 серебряных знаков133 бронзовых знака

Через LINQ

bool result = array.Any(n => n == name);

ответ дан 22 авг 2016 в 7:16

Mirdin's user avatar

MirdinMirdin

5,8011 золотой знак21 серебряный знак29 бронзовых знаков

Выяснить, содержит ли массив искомый элемент, или нет, можно с помощью функций
Array.Exists или Array.IndexOf:

contains = Array.IndexOf(array, name) != -1;

или

contains = Array.Exists(array, v => v == name);

VladD's user avatar

VladD

206k27 золотых знаков289 серебряных знаков521 бронзовый знак

ответ дан 22 авг 2016 в 7:18

Артём Ионаш's user avatar

Артём ИонашАртём Ионаш

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_a's user avatar

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

Jonny Bob's user avatar

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

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте, задание вроде не сложное, но не получается вывести позицию элемента, вот код

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
    static void Main(string[] args)
        {
            Console.WriteLine("Введите размер массива: ");
            int size = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Заполните массив: ");
            int[] arr = new int[size];
            for (int k = 0; k < arr.Length; k++)
            {
                Console.WriteLine($"{k} элемент массива: ");
                arr[k] = Convert.ToInt32(Console.ReadLine());
            }
 
            Console.WriteLine("Введите число, которое хотите найти в массиве:");
            int number = Convert.ToInt32(Console.ReadLine());
            int pos = 0;
            int j;
            for (j = 0; j < size; j++)
            {
                Console.WriteLine(j);
                pos++;
              }
            if (number == j)
            {
                Console.WriteLine($"Элемент находится на позиции {arr[j]},{pos}");
 
            }
            else
                {
                Console.WriteLine("Данного элемента нет в массиве!!!");
            }
        }



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

08.09.2018, 17:07

Ответы с готовыми решениями:

Напишите программу, которая определит какой элемент находится на позиции k
Дан одномерный массив целых чисел A. Напишите программу, которая определит какой элемент находится…

В массиве вычислить минимальный парный элемент, который находится на непарной позиции
В одномерном массиве, состоящем из n целых элементов, вычислить:
1) минимальный парный елемент,…

Найти нулевой(ые) элемент(ы) в матрице, вывести на пересечение какой строки и столбца располагается(ются) этот(эти) элемент(ы)
Ребят, программа нужна срочно, мне на неё нужно много потратить времени, помогите. Язык Си.

Поиск определенного числа в массиве
В массиве А (20) определенное число случается несколько раз. Что это за число, сколько раз оно…

3

zivco

2 / 1 / 1

Регистрация: 22.04.2018

Сообщений: 2

08.09.2018, 17:20

2

Лучший ответ Сообщение было отмечено Rusya19 как решение

Решение

У Вас ошибка была в сравнении элементов. Вы сравнивали введенное число с позицией элемента, а не с самим элементом. И еще, вам не нужно считать позицию числа, для этого есть переменная j

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
for (j = 0; j < size; j++)
            {
                Console.WriteLine(j);
              }
            if (number == arr[j])
            {
                Console.WriteLine($"Элемент находится на позиции {arr[j]},{j}");
 
            }
            else
                {
                Console.WriteLine("Данного элемента нет в массиве!!!");
            }



0



Rusya19

0 / 0 / 0

Регистрация: 17.06.2018

Сообщений: 34

08.09.2018, 18:23

 [ТС]

3

C#
1
if(number == arr[j])

на этой строчке вылетает программа “Индекс находился вне границ”

Добавлено через 6 минут
исправил, но теперь else выводится несколько раз

Добавлено через 3 минуты
все работает)



0



Элд Хасп

Модератор

Эксперт .NET

13780 / 9992 / 2661

Регистрация: 21.04.2018

Сообщений: 29,762

Записей в блоге: 2

08.09.2018, 19:05

4

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
static void Main(string[] args)
        {
            Console.Write("Введите размер массива: ");
            int size = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Заполните массив: ");
            int[] arr = new int[size];
            for (int k = 0; k < arr.Length; k++)
            {
                Console.Write($"{k} элемент массива: ");
                arr[k] = Convert.ToInt32(Console.ReadLine());
            }
 
            Console.Write("Введите число, которое хотите найти в массиве:");
            int number = Convert.ToInt32(Console.ReadLine());
 
            int pos = -1;
            for (int j = 0; j < arr.Length; j++)
            {
                if (number == arr[j]) { pos = j; break; }
            }
            if (pos >= 0) Console.WriteLine($"Элемент {number} находится на позиции {pos}");
            else Console.WriteLine($"Элемента {number} нет в массиве!!!");
 
            Console.WriteLine("Для закрытия нажмите любую клавишу...."); Console.ReadKey();
 
        }



0



Добавить комментарий