2014-11-11 2 views
-1

Так вот мой код:C# - создание комбинации массива, нужно объяснение

 Console.Write("Insert first array length: "); 
     string[] izmers1 = new string[Convert.ToInt32(Console.ReadLine())]; 
     Console.Write("Insert second array length: "); 
     string[] izmers2 = new string[Convert.ToInt32(Console.ReadLine())]; 

     for (int i = 0; i < izmers1.Length; i++) 
      { 
       Console.Write("Insert 1.array {0} array value: ", i + 1); 
       izmers1[i] = Console.ReadLine(); 
      } 

     for (int j = 0; j < izmers2.Length; j++) 
      { 
       Console.Write("Insert 2.array {0} array value: ", j + 1); 
       izmers2[j] = Console.ReadLine(); 
      } 

     for (int k = 0; k < izmers1.Length; k++) 
      { 
       Console.WriteLine("1.array {0} value is {1}", k + 1, izmers1[k]); 
      } 


     for (int p = 0; p < izmers2.Length; p++) 
      { 
       Console.WriteLine("2.array {0} value is {1}", p + 1, izmers2[p]); 
      } 

Мне нужно создать цикл или что-то, что будет создавать сочетание массива. Представьте, что мы вошли длиной 3 и 4. Затем вставьте какое-то значение для каждого, наш вывод:

 1.array 1.value q 
    1.array 2.value w 
    1.array 3.value e 
    2.array 1.value Q 
    2.array 2.value W 
    2.array 3.value E 
    2.array 4.value R 

мне нужно создать комбинацию, которая будет выглядеть как этот qQwWeER. Мой английский не очень хорошо, так что я надеюсь, что кто-то понять, что мне нужно, и может объяснить, как получить его :)

ответ

1

Вы можете использовать Linq-х Enumerable.Range, Enumerable.Aggregate вместе с StringBuilder создать объединенную строку:

var s = Enumerable.Range(0, Math.Max(izmers1.Length, izmers2.Length)).Aggregate(new StringBuilder(), (sb, i) => 
     { 
      if (i < izmers1.Length) sb.Append(izmers1[i]); 
      if (i < izmers2.Length) sb.Append(izmers2[i]); 
      return sb; 
     }).ToString(); 
    } 

Обновление Вам необходимо научиться читать выражения Linq и лямбда, они являются неотъемлемой частью языка и широко используются. Код, который я написал также можно переписать следующим образом:

StringBuilder sb = new StringBuilder(); 
    for (int i = 0, length = Math.Max(izmers1.Length, izmers2.Length); i < length; i++) 
    { 
     if (i < izmers1.Length) sb.Append(izmers1[i]); 
     if (i < izmers2.Length) sb.Append(izmers2[i]); 
    } 
    var s = sb.ToString(); 
+0

Можно ли получить более простой код, как я? с или для чего-то. Я только начал изучать C#, и этот код выглядит слишком сложным для меня на данный момент: s – naathanz

+1

@naathanz - ОК, но, пожалуйста, будьте более конкретными в отношении ваших требований в будущих вопросах. – dbc

1

Это тоже работает:

var result = 
    String.Join("", Enumerable.Zip(
     izmers1.Concat(Enumerable.Repeat("", izmers2.Length)), 
     izmers2.Concat(Enumerable.Repeat("", izmers1.Length)), 
     (i1, i2) => i1 + i2)); 

Это стоит узнать некоторые из этих подходов, так как они могут сделать ваше кодирование намного проще.

Смежные вопросы