2012-07-02 1 views
2

У меня есть следующие строковые массивы:Как переплести две строки или массивы, возможно, с string.join()

var myArray1 = new string[] {"A", "B", "C"}; 
var myArray2 = new string[] {"t1", "t2"}; 

Я хотел бы быть в состоянии произвести окончательную строку, которая выглядит следующим образом:

var myFinalString = "t1.A, t2.A, t1.B, t2.B, t1.C, t2.C"; 

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

+1

Так у вас есть два массива, один из которых { 'A', 'B', 'C'}, а другой { "t1", "t2"}? –

+0

И вы хотите размножить оба, а затем сделать строку из результирующего массива? –

+0

Да, извините, я пропустил печатать там 2-й массив. Обновит сообщение. – AngieM

ответ

4

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

var query = from x in new[]{"A", "B", "C"} 
     from y in new[]{"t1", "t2"} 
     select y + "." + x; 

var result = string.Join(", ", query.ToArray()); 
+0

Спасибо за помощь !!! – AngieM

6

Я не знаю, что любой прямой метод существует, но это один вкладыш

return 
    from a in myArray 
    from b in tTerms 
    select string.Format("{0}.{1}", b, a) 

должны это сделать .

+0

Спасибо за помощь !!! – AngieM

-1

Если две последовательности имеют одинаковую длину, вы могли бы, вероятно, положил Enumerable.Zip работать для вас

.
var myFinalString = myArray.Zip(mySecondArray, (f, s) => f + "." + s); 
+3

Ему нужен декартово произведение. Это не то, что делает «Zip». – Servy

2

Срок такой последовательности: "Cartesian Product".

Вот длинный блог Эрик Липперт на нем Computing a Cartesian Product with LINQ

Как уже показана в других ответах последовательности кортежей может быть получено с помощью следующего кода и чем агрегируется (с помощью регистрации в случае строки, или Совокупный для других тип результата) для получения окончательного строку:

var product = 
    from first in s1 
    from second in s2 
    select new[] { first, second }; 
var result String.Join(", ", 
    product.Select(p => String.Format("{0}.{1}", p.first, p.second)); 
+2

Хотя это отличная ссылка и фрагмент кода, здесь кажется, что всегда будет всего 2 набора, поэтому вам не нужна эта более общая версия; вы можете просто использовать один вызов SelectMany. – Servy

+0

@ Серви, конечно. Я знаю, что это универсальный - для полезного ответа есть ответы на высокий голос уже :) –

+0

Спасибо, что просветили меня по тому, что это называется. Я отредактирую сообщение таким образом, чтобы другие могли найти ответы. – AngieM