반복하지 않고 목록에서 항목의 색인을 찾으려면 어떻게해야합니까?
현재 이것은별로 좋지 않습니다. 색인을 얻기 위해 동일한 항목의 목록을 두 번 검색하면됩니다.
var oProp = something;
int theThingIActuallyAmInterestedIn = myList.IndexOf(myList.Single(i => i.Prop == oProp));
답변
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
있지만 원래 항목을 반환하는 대신 조건 자와 일치하는 항목의 인덱스를 반환했습니다.
답변
LINQ를 사용하지 않으려면 다음을 수행하십시오.
int index;
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Prop == oProp)
{
index = i;
break;
}
}
이렇게하면 목록을 한 번만 반복합니다.
답변
- List에서 문자열 값에 대한 인덱스를 찾는 간단한 솔루션입니다.
다음은 List Of String의 코드입니다.
int indexOfValue = myList.FindIndex(a => a.Contains("insert value from list"));
- 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;
}
}
즐겨.
답변
누구든지 Array
버전이 궁금하다면 다음과 같이 진행됩니다.
int i = Array.FindIndex(yourArray, x => x == itemYouWant);