2017-11-15 10 views
-1

나는 자동차은 ICollection에서 항목의 인덱스를 얻는 방법 <T>

ICollection<Cars> Cars 

와 나는 또한 내가 인덱스/위치를 얻는 방법은 ICollection에 알고있는 하나의 자동차 객체를 가지고이 목록을 가지고 목록에있는 차에요?

var index = cars.Where(b=> b.Id == car.id).Single().iWantTheIndex 
stringList.Add(index) 

어떤 아이디어 : 나는 문자열

이것은 내가 지금까지 무엇을 가지고 목록에 추가해야합니까?

+0

LINQ에는 FindIndex() 메소드가 없습니다. – SLaks

+1

'(b => b.car.Id == car.id) .index;' –

+0

'var index = cars.Select ((b, i) => 새로운 {car = b, index = i} 'ICollection '에도 색인이 있습니까? 그것의 색인에 기초를 두어 *'차'에서 성분 *를 어떻게 얻는가? – David

답변

5

색인 된 모음을 사용하려면 ICollection<T>이 아닌 IList<T>을 사용해야합니다. ICollection<T>은 항목을 열거하고 추가하고 제거 할 수 있으며 그 수를 계산할 수있는 항목입니다. IList<T>은 항목이 지정된 순서로되어 있고 목록의 위치를 ​​기반으로 액세스 할 수있는 모음입니다.

ICollection<T>은 반드시 순서가 지정된 컬렉션을 나타내지는 않으므로 항목의 의미있는 "인덱스"를 가져올 수 없습니다. 항목에 의 위치가 인 것은 아닙니다.

1

이 당신에게 현재 반복의 인덱스 줄 것이다 :

var index = cars.Select((c, i) => new{ Index = i, Car = c }) 
       .Where(item => item.Car.Id == car.id) 
       .Single() 
       .Index; 

stringList.Add(index); 

다음 반복이 다른 순서가있을 수 있습니다 (귀하의 ICollection<>의 실제 구현에 따라) 및 발생할 수 있습니다주세요 완전히 다른 색인으로,이 색인을 사용하는 것에주의하십시오.

+4

이 색인은 가치의 아무것도를 제공하지 않는다. 컬렉션이 주문되지 않았습니다. 다음에 열거 할 때 완전히 다른 색인을 가질 수 있습니다. – Servy

+1

@Servy 맞습니다. 다음 번에 이것을 호출하면 인터페이스 뒤에있는 실제 구현에 따라 다른 색인을 얻을 수 있습니다. 그러나, 그 차의 * 현재 * 색인이 어떤 가치든지다는 것을 말하는 것은 나에게 달려있다. 나는 이것을 얻을 수있는 방법이라고 말할 수 있습니다. – nvoigt

+2

그러나 값의 현재 색인은 * 가지고 있지 않습니다. 다시 액세스 할 수없는 시퀀스에서 인덱스가 사용했던 값이 있습니다. 실제로 컬렉션의 항목 인덱스가 없습니다. – Servy

0

나는이 자동차 목록을 ICollection<Cars>에 가지고 있습니까?

이 항목은 목록이 아니기 때문에 처음부터 오해의 소지가 있습니다. 컬렉션은 List<Car> or Car[] 일 수도 있고 아닐 수도 있습니다.

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable

: 다음

MSDN - IList<T>Count이 중요한 사항이며, IsReadOnly -

public interface ICollection<T> : IEnumerable<T>, IEnumerable

속성 : 다음

MSDN - ICollection<T>는, 중요한 세부 사항은 다음과 같습니다의 인터페이스 정의를 살펴 보자 ,

속성 - IsReadOnly, Count, Item[Int32]

노출 추가 속성을 사용하면, 내부적으로 인덱스 액세스를 제공하는 T[]를 사용 List<T> 같은 것을 필요하다 구현하는 데이터 구조에 인덱서/색인 액세스입니다 Item[Int32]입니다 따라서 사용 사례만으로 충분합니다.

그러나 Dictionary<TKey,TValue>과 같은 것은 색인 또는 주문 옵션을 제공하지 않으므로 요소에 대한 색인이 동일하게 유지된다는 보장이 없습니다.완료된 순서는 다른 데이터 구조입니다.