답변:
int index = myList.FindIndex(a => a.Prop == oProp);
이 방법은 선형 검색을 수행합니다. 따라서이 방법은 O (n) 연산이며 여기서 n은 Count입니다.
항목을 찾지 못하면 -1을 반환합니다.
간단한 유형의 경우 "IndexOf"를 사용할 수 있습니다.
List<string> arr = new List<string>();
arr.Add("aaa");
arr.Add("bbb");
arr.Add("ccc");
int i = arr.IndexOf("bbb"); // RETURNS 1.
편집 : 당신이하는 경우 에만 사용 a List<>
당신은 단지 인덱스가 필요하고 List.FindIndex
실제로 가장 좋은 방법입니다. 나는 다른 것을 필요로하는 사람들을 위해이 대답을 남겨 둘 것입니다 (예 :) IEnumerable<>
.
Select
술어에서 인덱스를 사용하는 오버로드를 사용 하므로 목록을 (인덱스, 값) 쌍으로 변환하십시오.
var pair = myList.Select((Value, Index) => new { Value, Index })
.Single(p => p.Value.Prop == oProp);
그때:
Console.WriteLine("Index:{0}; Value: {1}", pair.Index, pair.Value);
또는 인덱스 만 원하고 여러 위치에서 이것을 사용하는 경우와 같은 자체 확장 방법을 쉽게 작성할 수 Where
있지만 원래 항목을 반환하는 대신 조건 자와 일치하는 항목의 인덱스를 반환했습니다.
Single()
해당 시퀀스를 반복 하여 작업을 수행하고 조건 자와 일치하는 단일 항목을 찾습니다. 자세한 내용은 내 edulinq 블로그 시리즈를 참조하십시오 : codeblog.jonskeet.uk/category/edulinq
LINQ를 사용하지 않으려면 다음을 수행하십시오.
int index;
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Prop == oProp)
{
index = i;
break;
}
}
이렇게하면 목록을 한 번만 반복합니다.
FindIndex
입니까?
다음은 List Of String의 코드입니다.
int indexOfValue = myList.FindIndex(a => a.Contains("insert value from list"));
정수 목록 코드는 다음과 같습니다.
int indexOfNumber = myList.IndexOf(/*insert number from list*/);
IEnumerable에 대한 복사 / 붙여 넣기 가능 확장 방법은 다음과 같습니다.
public static class EnumerableExtensions
{
/// <summary>
/// Searches for an element that matches the conditions defined by the specified predicate,
/// and returns the zero-based index of the first occurrence within the entire <see cref="IEnumerable{T}"/>.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list">The list.</param>
/// <param name="predicate">The predicate.</param>
/// <returns>
/// The zero-based index of the first occurrence of an element that matches the conditions defined by <paramref name="predicate"/>, if found; otherwise it'll throw.
/// </returns>
public static int FindIndex<T>(this IEnumerable<T> list, Func<T, bool> predicate)
{
var idx = list.Select((value, index) => new {value, index}).Where(x => predicate(x.value)).Select(x => x.index).First();
return idx;
}
}
즐겨.
int index
?