Как найти индекс структуры в массиве C#

Я пытаюсь найти индекс структуры в массиве.

Например:

Мой массив назван members заполнен структурами со значениями id, name, age, location,

Я знаю имя члена, но хочу найти идентификатор этого члена, не зная индекса.

Это возможно?

редактировать
Я хотел бы сделать это без использования LINQ.

3 ответа

Решение

Конечно, и вам даже не нужно использовать LINQ:)

Array.FindIndex(yourarray, s => s.name == "John")

Возвращаемое значение из этого вызова метода является первым индексом вашего массива, где находится элемент массива (называемый s) имеет имя, равное Джону

findIndex также может принимать дополнительные параметры, чтобы начать частичный поиск и т. д., см. https://msdn.microsoft.com/en-us/library/03y7c6xy(v=vs.110).aspx

Редактировать:

Я думал, что вы попросили индекс массива, но, кажется, вы хотите, чтобы связанный идентификатор дал имя.

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

Array.Find(yourarray, s => s.name == "John") //returns the matching struct 

Обратите внимание, что если нет подходящего имени, вы получите структуру, представляющую значение по умолчанию (T). Вы также должны заметить, что если вы планируете манипулировать возвращаемой структурой, она НЕ БУДЕТ изменять значения структуры в массиве (Find возвращает вам копию записи массива). В этом случае используйте FindIndex, а затем управляйте записью массива с помощью чего-то вроде yourarray[foundindex].name = "Jon"

Как насчет использования .FindIndex:

var index = members.FindIndex(it => it.name = myName);

с using System.Collections.Generic;

Используйте Array.Find(), чтобы найти объект, и Array.IndexOf(), чтобы получить его индекс.

Array.IndexOf(members, Array.Find(members, x => x.name == "Name to find"));

https://msdn.microsoft.com/en-us/library/d9hy2xwa(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/7eddebat(v=vs.110).aspx

Другие вопросы по тегам