Перемножение строк

297
10 января 2018, 15:15

Как правильно сделать перемножение string[] ?

Пробовал сделать из 3х условий for, запихивая в новый массив, но что то дико долго работает,а от ещё большего количества слов, вообще замирает.

Задача (как пример, на деле же будут слова):

3 массива string c 0,1,2,3,4,5,6,7,8,9

На выходе должно быть:

  • 001
  • 002
  • 003
  • 004
  • и т.д.

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);
}
Answer 1

Ну, давайте начнем по порядку, вы записываете результат в массив, это отнимает время, вы работаете с циклом 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();
Answer 2

Попробуй через 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);
Answer 3

Переписал немного ваш код

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()); 
READ ALSO
Возможно ли написать с новой строки?

Возможно ли написать с новой строки?

Использую анимацию загрузки во время авторизации

234
Не отправляются сообщения через сокеты

Не отправляются сообщения через сокеты

Запускаю сервер, потом клиент, отправляю сообщение с клиента, все отображается, набираю второе, жму Enter, сообщение не отправляется, а консоль...

250
Как установить focus в safari mobile?

Как установить focus в safari mobile?

Добрый день! Ситуация такая: есть скрипт (jquery), который ищет форму (поле) и делает ейfocus()

269
Преобразование `null` в `0` (javascript)

Преобразование `null` в `0` (javascript)

Допустим у нас есть вот такой код на javascript

399