LINQ:将数组[,]转换为array []

时间:2010-04-07 18:19:33

标签: c# linq c#-3.0

我知道这是一个愚蠢的问题,但有没有人有一个优雅的(或非优雅的)LINQ方法将2D数组(对象[,])转换为由一个数组构成的一维数组(object []) 2D阵列的第一维?

示例:

        // I'd like to have the following array
        object[,] dim2 = {{1,1},{2,2},{3,3}};

        // converted into this kind of an array...  :)
        object[] dim1 = { 1, 2, 3 };

3 个答案:

答案 0 :(得分:6)

您声称自己需要a 1D array (object[]) comprised of the first dimension of the 2D array,所以我假设您正在尝试选择原始2D数组的子集。

int[,] foo = new int[2, 3]
{
  {1,2,3},
  {4,5,6}
};

int[] first = Enumerable.Range(0, foo.GetLength(0))
                        .Select(i => foo[i, 0])
                        .ToArray();

// first == {1, 4}

答案 1 :(得分:0)

@Elisha也发布了一个答案(最初没有编译),我今天下午正在调查。我不知道为什么他删除了他的答案,但我继续他的代码示例,直到一切都解决了,它也给了我我需要的东西:

object[,] dim2 = 
   {{"ADP", "Australia"}, {"CDN", "Canada"}, {"USD", "United States"}};

object[] dim1 = dim2.Cast<object>().ToArray();

// dim1 = {"ADP", "CDN", "USD"} 

此代码编译并返回预期结果。我很高兴.Cast(),我只需要第一个维度,而不是第二个维度。

答案 2 :(得分:0)

通常,对于集合集合(而不是数组数组),您可以执行以下操作:

mainCollection.Select(subCollection => subCollection.First());