2

C#に整数リストがあります。パラメータを与えstartIndex、そこからサブリストを取得するメソッドが必要です。stepリーチが終了したら、クロスしてリストの先頭に移動します。サークルのように

public List<int> GetSomeInt(List<int> mainList, int startIndex, int step )
{
  ...
}

たとえば、リスト要素は 4、2、85、6、7、89、1、0、36、47、11、75です。私はメソッドにとを与えます、そして私はそう結果を得startIndex=3ます:step=5

result1 - 6, 7, 89, 1, 0
result2 - 36, 47, 11, 75, 4
result3 - 2, 85, 6, 7, 89, 1
result4 - 0, 36, 47, 11, 75
result5 - 4, 2, 85, 6, 7
result6 - 89, 1, 0, 36, 47
........................

リストの非常に連続したサブ要素を取得するにはどうすればよいですか?

4

2 に答える 2

2

これがあなたが達成しようとしていることを実行するいくつかのコードです、あなたはこのコードを渡すべきではありません、それは単なるガイドです:

public List<int> GetSomeInt(List<int> mainList, int startIndex, int step )
{
    return mainList.Skip(startIndex).Take(step);
}

使用される関数は次のとおりです。スキップ テイク

あなたの先生(?)はおそらくこの答えを受け入れないSkipでしょう、それで私はあなたがと同じことをするあなた自身の関数をハードコーディングすることを提案しますTake

お役に立てれば!

于 2012-09-12T05:58:35.110 に答える
1

ラウンドシフトQueueを実行してから、LINQで結果を取得するために使用できます 。Take

public static List<List<int>> GetSomeInt(List<int> mainList, 
                                         int startIndex, int step)
{
    var queue = new Queue<int>();
    mainList.ForEach(queue.Enqueue);

    Enumerable.Range(0, startIndex)
        .ToList()
        .ForEach(i => queue.Enqueue(queue.Dequeue()));

    var result = new List<List<int>>();

    while (true)
    {
        var list = queue.Take(step).ToList();
        list.ForEach(i => queue.Enqueue(queue.Dequeue()));

        if (result.Any(l => l.All(list.Contains)))
            break;

        result.Add(list.ToList());
    }

    return result;
}
于 2012-09-12T06:34:42.567 に答える