7

2 つの要素を渡して 2 つを比較する並べ替えられたリストがあります。次と前を行うC#のSortedListクラスに関数はありますか? .Skip の助けを借りましたが、キーは可変なので、どのように機能しますか? 最初の要素と 2 番目の要素を取り込んで、3 番目と 4 番目、5 番目と 6 番目などにスキップするだけです。

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

編集:positionListはタイプです

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

それは役に立ちますか?

ありがとう!

4

3 に答える 3

1

クラス SortedList はIEnumeratorを継承するため、次のように使用できます。

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

...

class Pair<T>
{
    public T First {get; set;}
    public T Second {get; set;}

    public static Pair<T> Next<T>(IEnumerator enumerator)
    {
        var first = enumerator.Current;
        if(enumerator.MoveNext())
        {
           return new Pair<T>
               {
                   First = (T)first,
                   Second = (T)enumerator.Current,
               }
        }
        return null;
    }
}
于 2013-03-11T10:16:59.933 に答える
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] };
于 2013-03-11T09:20:56.410 に答える
0

質問がやや不明確です。リストからペアを取得する必要があると思いますか?

IEnumerable からアイテムのペアのシーケンスを表示する拡張メソッドを作成するのはかなり簡単です。

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);
                }
            }
        }
    }
}
于 2013-03-11T09:39:38.563 に答える