2013-03-11 2 views
5

두 요소를 전달하고 두 요소를 비교하는 정렬 된 목록이 있습니다. 다음 및 이전 작업을 수행하는 C#의 SortedList 클래스에 함수가 있습니까? .Skip에 대한 도움이되었지만 키가 다양하기 때문에 어떻게 작동할까요? 필자가해야 할 일은 첫 번째 요소와 두 번째 요소를 가져 와서 세 번째와 네 번째, 다섯 번째 및 여섯 번째 등으로 건너 뛰는 것입니다. LinkedList의 ".next.next"처럼 간단 할 것입니다.정렬 된 목록에서 다음 요소와 이전 요소의 값 검색 C#

double velocity = positionList.Values.Skip(1); 

편집은 다음 positionList는

<double, HandCoordinate> 
    HandCoordinate = {double, double, double} 

가 도움이됩니까 입력입니까?

감사합니다.

+1

목록이므로 왜 색인 및 증분 그것을 감소 ​​시키시겠습니까? –

+0

'positionList'의 정확한 타입을 지정하십시오. 지금은 사전과 같습니다. –

+0

@Henk Holterman :'SortedList'는'Values' 속성을 가지고 있습니다. –

답변

0
List<int> ints = new List<int>(); 
    ints.Add(1); 
    ints.Add(2); 
    ints.Add(3); 
    ints.Add(4); 
    for (int i = 0; i < ints.Count; i += 2) 
    { 
    var pair = ints.Skip(i).Take(2); 
    var first = pair.First(); 
    var last = pair.Last(); 
    } 

참고 : 이것은 이론상 유형과 상관없이 작동해야합니다. 유형이 크게 다른 형식이 아닌 한.

Skip()없이.

var pair = new { First = ints[i], Second = ints[i += 1] }; 
+0

Skip()은 O (n)이므로 O (n^2)가됩니다. 큰 목록에는 적합하지 않습니다. –

+0

@HenkHolterman op가 예를 들어 건너 뛰기를 사용하면 논리가 동일한 것을 수행합니까? – LukeHennerley

+0

@HenkHolterman 어느쪽으로 든, 나는'Skip()'을 사용하지 않고 길을 지정했다. – LukeHennerley

0

질문이 다소 불투명합니다. 목록에서 물건의 쌍을 얻어야한다고 가정합니다. 당신이 그것을 사용할 수 있도록,

using System; 
using System.Collections.Generic; 

namespace Demo 
{ 
    internal static class Program 
    { 
     public static void Main() 
     { 
      double[] test = new double[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

      foreach (var pair in test.AsPairs()) // This is how you use it. 
      { 
       Console.WriteLine("({0}, {1})", pair.Item1, pair.Item2); 
       // Or simply: Console.WriteLine(pair); 
      } 
     } 
    } 

    public static class EnumerableExt 
    { 
     public static IEnumerable<Tuple<T, T>> AsPairs<T>(this IEnumerable<T> sequence) 
     { 
      bool isFirst = true; 
      T first = default(T); 

      foreach (var item in sequence) 
      { 
       if (isFirst) 
       { 
        first = item; 
        isFirst = false; 
       } 
       else 
       { 
        isFirst = true; 
        yield return new Tuple<T, T>(first, item); 
       } 
      } 
     } 
    } 
} 
0

클래스 SortedList의 inherites IEnumerator을 :

그것은을 IEnumerable에서 항목의 쌍의 순서를 발표 할 예정이다 확장 메서드를 작성하는 매우 쉽게

SortedList list = ... 
var listEnumerator = ((IEnumerable)list).GetEnumerator(); 
Pair<MyType> pair = null 
do 
{ 
    pair = Pair.Next<MyType>(listEnumerator); 
    ... 
} 
while(pair != null) 

...

관련 문제