2014-01-04 4 views
1

Я хочу сделать это в LINQ:Конкатентные массивы с определенным индексом с LINQ?

public static void ConcatAt(this string[] items, string[] others, int at) 
{ 
    for (int i = 0; i < others.Length && at < items.Length; i++, at++) { 
     items[at] = others[i]; 
    } 
} 

Использование:

string[] groups = { "G1", "G2", "G3" }; 
string[] names = new string[groups.Length + 1]; 
names[0] = "Choose"; 
names.ConcatAt(groups, 1); 

foreach (var n in names) 
    Console.WriteLine(n); 

/* 
Choose 
G1 
G2 
G3 
*/ 

Строка был просто пример, может быть что угодно, хотя.

Итак, существует ли метод LINQ, который делает это?

Выполнение names = names.Concat(groups).ToArray(); будет включать пустые строки, в названиях, так что если я печатаю names я получаю:

/* 
Choose 



G1 
G2 
G3 
*/ 

Спасибо.

+0

Не уверен, что я понимаю, почему в вашем конкретном примере, вы не можете использовать 'имена = names.Concat (группы) .ToArray(); '? Является ли требование индексом ...? –

+0

Нет, потому что это включало бы пустые строки, а также имена. Так что, если я напечатаю «имена», я бы получил «Выбрать», «», «», «», «G1» и т. Д. – vexe

+0

Что с -1? – vexe

ответ

5

Почему вы не используете Array.Copy?

Array.Copy(groups, 0, names, at,groups.Length); 
+0

Спасибо, что работает. Я никогда не использовал это. Я думал, что будет какой-то метод LINQ. – vexe

1

Я думаю, что это будет работать для вас

  string[] groups = { "G1", "G2", "G3" }; 

     var myNewItems = groups.ToList(); 

     int pos = 1; 
     string value = "Choose"; 
     myNewItems.Insert(pos,value); 



     foreach (var v in myNewItems) 
     { 
      Console.WriteLine(v); 
     } 
     Console.ReadLine(); 
+0

Правильно Это работает для этой конкретной ситуации. – vexe

+0

конкретные средства? Вы хотите объединить массив в разных типах данных ? –

+0

Я имею в виду, я искал более общее решение, которое объединяет массивы с определенным индексом в определенной длине, но вы обеспечили обход, который работает специально для моего случая, когда мне просто нужно вставить «Выбрать» перед «G» Спасибо за помощь. – vexe

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