2013-07-16 141 views
3

我会保持这种简单。我的数据集如下:将阵列1中的每个元素与阵列2中的每个元素结合起来

阵列1:

James 
Bob 
Jim 

阵列2:

0 
1 
2 

我想通过加入两个数组,以创建一个新的阵列,它们产生类似以下内容:

James 0 
James 1 
James 2 
Bob 0 
Bob 1 
Bob 2 
Jim 0 
Jim 1 
Jim 2 

它如何在C#中完成。我之前遇到过这个问题,我记得使用了扩展方法,但我不知道集合论的哪个领域属于这个领域。

+1

你是什么结果数组,字符串'[]'的类型? –

+0

我想第一个数组是字符串,第二个是int和像蒂姆问什么结果? – terrybozzio

+0

结果是一个字符串[] –

回答

5

你会用一个交叉联接(笛卡尔积):

var result = from x in array1 
      from y in array2 
      select string.Format("{0} {1}", x, y); 

亲身体验:http://ideone.com/1TdKGy

+0

通常术语“完全外部联接”用于其他内容,这称为___cross join___。 –

+0

@JeppeStigNielsen:对,谢谢。修复。 –

6

你正在寻找一个跨产品:

from a in a1 
from b in a2 
select new { a, b } 
1

你需要笛卡尔加入或交叉加入。另一种方式使用SelectMany做到这一点:

var arr1 = new string [] {"James","Bob","Jim"}; 
var arr2 = new int [] { 1, 2, 3}; 

var query = arr1.SelectMany(x => arr2, (x, y) => new { x, y }); 

foreach(var item in query) 
{ 
    Console.WriteLine(item); 
} 
0

这是另一种方式去:

  string[] names = { "James", "Bob", "Jim" }; 
      int[] numbers = { 0, 1, 2 }; 
      string[] result = new string[names.Length * 3]; 
      for (int i = 0, y = 0 ; i < result.Length; i+=3,y++) 
      { 
       result[i] = names[y] + numbers[0].ToString(); 
       result[i + 1] = names[y] + numbers[1].ToString(); 
       result[i + 2] = names[y] + numbers[2].ToString(); 
      } 
相关问题