Как решить проблему застревания двух вложенных циклов for?
Я закодировал приложение C# Windows Form, где есть два вложенных для циклов. как показано ниже:
List<int> My_LIST = new List<int>(); List<string> RESULT_LIST = new List<string>(); int[] arr = My_LIST.ToArray(); for (int i = 0; i < arr.Length; i++) { int counter = i; for (int j = 1; j <= arr.Length; j++) { if (counter == arr.Length) { counter = 0; } sb.Append(arr[counter].ToString()); RESULT_LIST.Add(sb.ToString()); counter++; } sb.Clear(); }
Я использовал этот код, чтобы взять любую комбинацию символов, которые находятся внутри моего массива.
Когда длина массива достигает 3000 или более, программа застревает. Как я могу исправить эту проблему?
Потому что, исходя из потребностей моего приложения, размер моего массива должен быть большим.
Что я уже пробовал:
Во-первых, я использовал обычную строку для получения комбинаций, и мой код был таким, как показано ниже:
string s = "";
вместо этого:
StringBuilder sb = new StringBuilder();
Я подумал, что может возникнуть проблема с максимальной длиной обычной строки, и поэтому изменил ее на
StringBuilderно проблема не была решена.
Richard MacCutchan
Что вы имеете в виду под этим "программа застревает"?
jekin77
почему вы конвертируете список < gt; В массив?
почему вы используете StringBuilder?
это все совершенно не нужные шаги !!!!
попробуй вот это ;)
List<int> My_LIST = new List<int>(); List<string> TMP_LIST = new List<string>(); List<string> RESULT_LIST = new List<string>(); for (int i = 0; i < My_LIST.Count; i++) { TMP_LIST.Clear(); int counter = i; foreach (var item in My_LIST) { if (counter == My_LIST.Count) counter = 0; TMP_LIST.Add(My_LIST[counter].ToString()); counter++; } RESULT_LIST.Add(string.Join("", TMP_LIST)); }