2016-07-19 5 views
-1

リストを指定された特定の数だけ右に回転しようとしています。配列(またはリスト)の回転は円として見ることができると考えられます。つまり、終わりから落ちる要素は先頭に折り返され、その逆も同様です。その良い例は、配列やリストを持っていて、それを3桁右に回転した場合、結果は次のようになります:C#、指定された場所でリストを右に回転

初期配列(またはリスト):20,30,40 、50、60、70 3ヶ所で右に回転し

:50、60、70、20、30、40

私は少しは私が理解して何のもと、ダウンいくつかのコードを書いていますこのコンセプト。私は知っている、それは私がそれをよりよく理解するのに役立つので、これを手動で(正しいコードやLINQの任意の並べ替えなし)を行う正しい方法は何ですか。

私はこの問題を解決する手作業を求めています。何も想像できません。ここで

public void Test8(List<int> items, int places) 
{ 
    int[] copy = new int[items.Count]; 
    items.CopyTo(copy, 0); 

    for (int i = 0; i < items.Count; i++) 
    { 
     int RotateRight = (i + places) % items.Count; 
     items[i] = copy[RotateRight]; 

    } 

} 
+0

を持つ別のアプローチは、私はあなたが投稿するものには空想のコードを参照してくださいません。上記のほとんどは、CまたはC++で記述することができます。 – user3185569

答えて

0

Skip()LinqTake()とapproacheです。

List<int> iList = new List<int>() { 20, 30, 40, 50, 60, 70 }; 
int rotate = 3; 
List<int> lResult = iList.Skip(rotate).Concat(iList.Take(rotate)).ToList(); 

単純なループ

int[] items = new int[] { 20, 30, 40, 50, 60, 70 }; 
int[] result = new int[items.Length]; 
int rotate = 3; 

for (int i = 0; i < items.Length; i++) 
{ 
    result[i] = items[(i+rotate)% items.Length]; 
} 
+0

これはどのようにitems.Lengthの代わりにループ内のitems.Countで動作できますか? – Dyrus

+0

@Dyrusは '.Length'の代わりに' .Count() 'を使用しますが、これは同じ結果ですが、' .Count() 'は' System.Linq.Enumerable'の一部であり、 'Linq' – fubo

関連する問題