0

{0, 1}、{1, 2}、{2, 3} などの重複するインデックスのペアを取る and アルゴリズムを考えてみましょうIEnumerable。最後に、{collection[0] などのこれらのインデックスの値に基づいて新しいコレクションを作成します。 、コレクション[1] =>結果[0]}、{コレクション[1]、コレクション[2] =>結果[1]}など。以下は、直接実装の例です。

IEnumerable<string> collection = new string[100];
var array = collection.ToArray();
var results = array.Skip(1).Select((e, i) => e - array[i]);

より良い方法で目標を達成する方法は?

4

3 に答える 3

2
var array = new string[] { "one", "two", "three" };
var result = Enumerable.Range(1, array.Length - 1)
                        .Select(i => new[] { array[i - 1], array[i] });

これは、タプルの代わりに配列を使用した@TrustMeソリューションです(サンプルを示すためだけに、私の答えを受け入れないでください):

IEnumerable<string> collection = new string[] { "one", "two", "three" };
var result = collection.Zip(collection.Skip(1), (x,y) => new [] { x, y });

ただし、インデックスによるアクセス (配列またはリスト) を使用しない場合、コレクションは2 回列挙されることに注意してください。


更新コレクションで機能し、シーケンスを一度だけ列挙する拡張メソッドを次に示します。

public static class Extensions
{
    public static IEnumerable<T[]> GetOverlappingPairs<T>(
        this IEnumerable<T> source)
    {
        var enumerator = source.GetEnumerator();
        enumerator.MoveNext();

        var first = enumerator.Current;

        while (enumerator.MoveNext())
        {
            var second = enumerator.Current;
            yield return new T[] { first, second };
            first = second;
        }
    }
}

使用法:

var result = collection.GetOverlappingPairs();
于 2013-02-19T08:28:43.677 に答える
2
 var result = Enumerable.Range(1, arrayCollection.Length - 1)
               .Select(i => new[] {arrayCollection[i - 1], arrayCollection[i]});

もしそうarrayCollectionならIEnumerable

var result = Enumerable.Range(1, arrayCollection.Count() - 1)
                 .Select(i => new[] {
                          arrayCollection.ElementAt(i - 1), 
                          arrayCollection.ElementAt(i) 
                        });
于 2013-02-19T08:18:58.170 に答える
2

そして、ここに別のものがあります:

var ints = Enumerable.Range(0, 10);
var paired = ints.Zip(ints.Skip(1), Tuple.Create);

そうすれば、ペア {0,1}、{1,2} ... を取得できます。

あなたのコードサンプルはあなたが説明したものとは少し違うので、それがあなたが求めているものだと思います... :)

于 2013-02-19T08:20:02.377 に答える