4

2 つの配列を 1 つの行列 (同じ長さと型) に結合する必要があることがよくあります。以下よりもエレガントなlinqの方法があるかどうか疑問に思っていました:

var result = new double[dt.Count, 2];

for (int i = 0; i < dt.Count; i++)
{
    result[i, 0] = dts[i];
    result[i, 1] = dt[i];
}

私は試した

var result = dts.zip(dt, (a,b) => new{a,b})

と:

var result = dts.Concat(dt).ToArray()

でも、やりたいこともやってない…

4

6 に答える 6

1

ここに別の解決策があります。LINQ 処理のために入力を「準備」します。これがエレガントかどうかはわかりませんが、LINQ です。

        // the input
        double[] dts = { 1, 2, 3, 4, 5 };
        double[] dt = { 10, 20, 30, 40, 50 };

        // list of lists, for iterating the input with LINQ
        double[][] combined = { dts, dt };

        var indexes = Enumerable.Range(0, dt.Length);
        var subIndexes = Enumerable.Range(0, 2);

        // the output
        var result = new double[dt.Length, 2];


        var sss = from i in indexes
                  from j in subIndexes
                  select result[i, j] = combined[j][i];

        // just to activate the LINQ iterator 
        sss.ToList();
于 2013-09-11T10:46:31.013 に答える
0

LINQ で直接行うことはお勧めしません。次のような一般的なメソッドを作成して、それを行うことができます。

    public static T[,] To2DArray<T>(this T[][] arr)
    {
        if (arr.Length == 0)
        {
            return new T[,]{};
        }

        int standardLength = arr[0].Length;

        foreach (var x in arr)
        {
            if (x.Length != standardLength)
            {
                throw new ArgumentException("Arrays must have all the same length");
            }
        }

        T[,] solution = new T[arr.Length, standardLength];
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = 0; j < standardLength; j++)
            {
                solution[i, j] = arr[i][j];
            }
        }
        return solution;
    }
于 2013-09-11T07:56:40.197 に答える
0

それが問題ではないことはわかっていますが、最もエレガントな答えは f# を使用することです。

let combinearrays (arr1:array<'a>) (arr2:array<'a>) = 
    let rws = arr1|> Array.length
    Array2D.init rws 2 (fun i j -> match j with |0 -> arr1.[i] |1 -> arr2.[i]) 

ジョンからはこちら

于 2013-10-09T10:47:31.653 に答える
0

これは、私が自分で使用するために開発したソリューション Convert two 1d Arrays in one 2D Array です。

(from a1 in array1.Select((n,index)=>new{Index=index,c1=n}).ToList() 
 join a2 in array2.Select((n,index)=>new {Index=index,c2=n}).ToList() on a1.Index equals a2.Index 
select new  {c1,c2}
).ToArray()
于 2015-05-01T20:14:41.400 に答える