代码之家  ›  专栏  ›  技术社区  ›  code4life

linq:将数组[,]转换为数组[]

  •  3
  • code4life  · 技术社区  · 15 年前

    我知道这是一个愚蠢的问题,但有人有优雅(或不优雅)的LINQ方法来将二维数组(对象[,])转换为包含二维数组第一维的一维数组(对象[])吗?

    例子:

            // 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 回复  |  直到 15 年前
        1
  •  6
  •   Greg    15 年前

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

    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}
    
        2
  •  0
  •   code4life    15 年前

    @以利沙也张贴了一个答案(最初没有汇编),我今天下午正在调查。我不知道他为什么删除了他的答案,但我继续他的代码示例,直到所有的事情都解决了,它也给了我我需要的:

    object[,] dim2 = 
       {{"ADP", "Australia"}, {"CDN", "Canada"}, {"USD", "United States"}};
    
    object[] dim1 = dim2.Cast<object>().ToArray();
    
    // dim1 = {"ADP", "CDN", "USD"} 
    

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

        3
  •  0
  •   Mike Asdf    15 年前

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

    mainCollection.Select(subCollection => subCollection.First());
    
    推荐文章