0

値を取得したい複数の配列に多くのデータが保存されていますが、問題が発生しています。識別子配列は

String[] seqNum2 = new String[600];
String[] seqNum = new String[600];

それらの配列で一致するデータを見つけて、これらの配列のデータと一致する情報を取得できるようにしたい

String[] netOil2 = new String[600];
String[] netOil = new String[600];

これまでのコードは次のとおりですが、必要な正しい答えを出力していません。出力しているのは、「System.String []、NaN」という無限ループだけです。

    private void netOilRadBtn_CheckedChanged(object sender, EventArgs e)
    {
        StreamWriter sw = new StreamWriter("test.txt"); //testing purposes only
        //StreamReader sr = new StreamReader("OUTPUT.CSV");
        double first;
        double second;


        for (int i = 0; i < netOil2.Length; i++)
            {
                for (int j = 0; j < netOil.Length; j++)
                {
                    if (seqNum2[i] == seqNum[j])
                    {
                        //sw.WriteLine("Find New Seq Num");
                        first = Convert.ToDouble(netOil2[i]);
                        second = Convert.ToDouble(netOil[j]);

                        double answer = (first - second) / first;

                        sw.WriteLine("{0}, {1}", seqNum2, answer);
                    }
                }
            }

    }

私ができるようにしたいのは、一致する seqNum を出力してから、二重の答えを出力することだけです。どんな助けでも大歓迎です。

4

4 に答える 4

1
private void netOilRadBtn_CheckedChanged(object sender, EventArgs e)
{
    using (var sw = new StreamWriter("test.txt")) //testing purposes only
    { 
        //StreamReader sr = new StreamReader("OUTPUT.CSV");

        var items =  netOil.Zip(seqNum, (oil, seq) => new {Oil = oil, Seq = seq});
        var items2 =  netOil2.Zip(seqNum2, (oil, seq) => new {Oil = oil, Seq = seq});

        foreach (var item in items.Join(items2,
                     i=>i.Seq,i=>i.Seq, (a,b)=>
                     {
                         double first = Convert.ToDouble(a.Oil);
                         double second = Convert.ToDouble(b.Oil);

                         double answer = (first - second) / first;
                         return string.Format("{0}, {1}", a.Seq, answer);
                     }))

        { 
            sw.WriteLine(item);
        }
    }
}
于 2013-06-04T15:05:03.027 に答える
0

ペア配列の代わりに、Dictionaryコレクションを使用します。

例えば:

Dictionary<Int32, Double> dictOil1 = new Dictionary<Int32, Double();
Dictionary<Int32, Double> dictOil2 = new Dictionary<Int32, Double();

//If seqNum and netOil _really are_ strings...
Int32 seq, seq2;
Double oil, oil2;
if (Int32.TryParse(seqNum, out seq) && Double.TryParse(netOil, out oil))
    dictOil1.Add(seq, oil);
if (Int32.TryParse(seqNum2, out seq2) && Double.TryParse(netOil2, out oil2))
    dictOil2.Add(seq2, oil2);
于 2013-06-04T15:08:06.923 に答える