将数组列入单独的数组

时间:2017-11-15 20:01:09

标签: c# arrays list int

我有一个使用List参数的构造函数。在该列表中,我有三个项目,即3个整数数组。

public HistogramLogic(List<Tuple<int[], int[], int[]>> separateRGB)

现在我想用该列表中的数组初始化三个新的整数数组。但是当我尝试这段代码时,我的新数组的索引保持为0.

for (int i = 0; i < histogramXValues.Length; i++)
{
     rArray = separateRGB.Select(obj => obj.Item1[i]).ToArray();
     gArray = separateRGB.Select(obj => obj.Item2[i]).ToArray();
     bArray = separateRGB.Select(obj => obj.Item3[i]).ToArray();
}

有人对如何解决此问题有任何建议吗?

3 个答案:

答案 0 :(得分:1)

您可以从touple

获取该项目
rArray = separateRGB.Select(obj => obj.Item1);

答案 1 :(得分:1)

请记住,如果您有N个元组的列表,则从3 x N阵列开始。听起来你希望它们组合成3个数组,每个数组都包含整个列表中的所有元素。您可以使用SelectMany

rArray = separateRGB.SelectMany(obj => obj.Item1).ToArray();
gArray = separateRGB.SelectMany(obj => obj.Item2).ToArray();
bArray = separateRGB.SelectMany(obj => obj.Item3).ToArray();

完整示例:

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    static public void HistogramLogic(List<Tuple<int[], int[], int[]>> separateRGB)
    {
        var rArray = separateRGB.SelectMany(obj => obj.Item1).ToArray();
        var gArray = separateRGB.SelectMany(obj => obj.Item2).ToArray();
        var bArray = separateRGB.SelectMany(obj => obj.Item3).ToArray();

        Console.WriteLine("rArray = {Export wizard}", string.Join(",", rArray));
        Console.WriteLine("gArray = {Generated structure}", string.Join(",", gArray));
        Console.WriteLine("bArray = {Launching tab}", string.Join(",", bArray));
    }

    public static void Main()
    {
        var mockData = new List<Tuple<int[], int[], int[]>>
        {
            Tuple.Create(new[] {11,12,13}, new[] {14,15,16}, new[] {17,18,19}),
            Tuple.Create(new[] {21,22,23}, new[] {24,25,26}, new[] {27,28,29}),
            Tuple.Create(new[] {31,32,33}, new[] {34,35,36}, new[] {37,38,39})
        };

        HistogramLogic(mockData);
    }
}

输出:

rArray = {11,12,13,21,22,23,31,32,33}
gArray = {14,15,16,24,25,26,34,35,36}
bArray = {17,18,19,27,28,29,37,38,39}

Click here for code on DotNetFiddle

答案 2 :(得分:1)

就像他们在评论中感到悲伤一样,你在每个循环中重新分配了本地成员。 你可以使用这样的东西。

public HistogramLogic(List<Tuple<int[], int[], int[]>> separateRGB)
{
    List<int> rList = new List<int>();
    List<int> gList = new List<int>();
    List<int> bList = new List<int>();

    separateRGB.ForEach((Tuple<int[], int[], int[]> tpl) =>
    {
        rList.AddRange(tpl.Item1);
        gList.AddRange(tpl.Item1);
        bList.AddRange(tpl.Item1);

    });

    rArray = rList.ToArray();
    gArray = gList.ToArray();
    bArray = bList.ToArray();

}

如果您不想使用temp List对象,您应该知道元组中元素的最终计数,将本地数组成员创建为所需的大小。并填写它。 List更适合添加和扩展元素。也许你可以使用一个Linq语句,但如果我理解目标是每个颜色得到一个int []数组。如果你采取

separateRGB.AsQueryable().Select(m => m.Item1).ToArray();

因此得到int [] []结果而不是简单的int数组;