Как правильно сделать перемножение string[] ?
Пробовал сделать из 3х условий for, запихивая в новый массив, но что то дико долго работает,а от ещё большего количества слов, вообще замирает.
Задача (как пример, на деле же будут слова):
3 массива string c 0,1,2,3,4,5,6,7,8,9
На выходе должно быть:
UPD: Добавил код проб
string[] spisok1 = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string[] spisok2 = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string[] spisok3 = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string[] resultat = new string[spisok1.Length * spisok2.Length *spisok3.Length];
int cifra = 0;
for (int i = 0; i < spisok1.Length; i++)
{
for (int o = 0; o < spisok2.Length; o++)
{
for (int p = 0; p < spisok3.Length; p++)
{
resultat[cifra] = spisok1[i] + " " + spisok2[o] + " " + spisok3[p];
cifra++;
}
}
}
for (int i = 0; i < resultat.Length; i++)
{
textBox1.AppendText(resultat[i] + Environment.NewLine);
}
Ну, давайте начнем по порядку, вы записываете результат в массив, это отнимает время, вы работаете с циклом for, запись результата в массив, использование численных переменных, перезаписывание данных куда либо, т.е. построчное считывание результата по индексу.
Я не буду строить из себя крутого, но ваш код можно оптимизировать так, что он будет отнимать время на выполнение:
~Время затраченное на строку с результатом: 00:00:00.0003914
Сам код:
Stopwatch stopwatch = new Stopwatch();
string[] spisok = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
var sb = new StringBuilder();
stopwatch.Start();
foreach (string t2 in spisok)
{
foreach (string t1 in spisok)
{
foreach (string t in spisok)
{
sb.Append($"{t2} {t1} {t}\n");
}
}
}
stopwatch.Stop();
TimeSpan ts = stopwatch.Elapsed;
Console.Write(sb.ToString());
sb.Clear();
Console.WriteLine($"Время затраченное на строку с результатом: {ts:T}");
Console.Read();
Попробуй через LINQ:
string[] str1 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string[] str2 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string[] str3 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
var query =
from s1 in str1
from s2 in str2
from s3 in str3
select s1+" "+s2+" "+s3;
foreach (var n in query)
Console.WriteLine(n);
Переписал немного ваш код
string[] spisok =
new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
int cifra = 0;
var sb = new StringBuilder();
for (int i = 0; i < spisok.Length; i++)
{
for (int o = 0; o < spisok.Length; o++)
{
for (int p = 0; p < spisok.Length; p++)
{
sb.Append(spisok[i]);
sb.Append(" ");
sb.Append(spisok[o]);
sb.Append(" ");
sb.Append(spisok[p]);
sb.AppendLine();
cifra++;
}
}
}
textBox1.AppendText(sb.ToString());
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости