2016-05-10 11 views
0

私は2つの値で順序付けられたリストを持っています。文字列、TimeSpan、および整数を含みます。最初の2人によって注文された。私はあなたにそれが含まれているものの例を紹介します:C#すでに2つの値でリストされている、比較する必要があります

E2801160600002066ED71483 09:36:37.6367671 1 
E2801160600002066ED71483 09:36:38.1968231 1 
E2801160600002066ED71483 09:36:38.8968931 2 
E2801160600002066ED71483 09:36:39.4969531 2 
E2801160600002066ED71483 09:36:40.2020236 2 
E2801160600002066ED71493 09:36:37.6367671 2 
E2801160600002066ED71493 09:36:38.3968431 2 
E2801160600002066ED71493 09:36:39.0969131 1 

最後の整数が2 antenasを意味し、ナンバーワンは、第1のアンテナで、数2が第二です。それは常に方向に向かいます。第1位になると第2位になると、製品が外に出ていることを意味します。それが第2位のために最初に行くと第1位のために後で、それは製品が内部に行くことを意味します。

したがって、リストを反復して整数を比較して、製品が外か中にあるかどうかを知る必要があります。

この例では、最初の製品(ストリングは83で終わります)は外側にあり、2番目の製品(ストリングは93で終わり)が内側に向かっています。だから私の意味を知っている。あなたのソートされたリストで

class Data 
{ 
    string ProductId {get; set;} 
    Timespan Timespan {get; set;} 
    int Antenna {get; set;} 
} 

...

List<Data> data = ... 

を... LINQのの助けを借りて、次の操作を行います:第一グループそれは製品によって、あなたのモデルがそうのように見えると仮定すると、

+0

ためのおかげで、あなたは、リストのタイプの定義を提供していただけますか?どのように呼ばれるプロパティは 'string'、' Timespan'と 'int'を格納しますか?これにより簡単に答えることができます。 –

+0

これらの値を保持するクラスを作成し、文字列を区切って解析し、クラスにこれらの値を設定してから、リストを反復して必要なものを決定します。 – CodeCaster

答えて

3

。 ..

var productEntries = data.GroupBy(entry => entry.ProductId); 

...その後(実際には、IEnumerable)新リストへの製品のグループ分けを投影しdetermiグループの最初の項目は、アンテナID 1またはその後2

var productDirections = productEntries.Select(
    product => new 
     { 
      Id = product.Key, 
      IsIncoming = product.First().Antenna == 2 
     }); 

新しいリストを反復処理するとの方向性を得るためにIsIncomingブール値を確認することができますを持っている場合、製品をチェックすることによって、私たちの発信を着信されているかどうかをNE製品。 Abbondanzaへ

foreach (var product in productDirections) 
{ 
    if (product.IsIncoming) 
     handleIncoming(product.Key); 
    else 
     handleOutgoing(product.Key); 
} 
+0

あなたのソリューションは、両方のアンテナがタグを認識したときにうまく動作します。しかし、今私は新しい問題を抱えています。最初のアンテナだけがそれを読み取ると、製品は外に出ていて、2番目のアンテナだけがそれを読み取ると、内部に入ると言います。そして、それは有効ではない、なぜなら、その製品が最初のアンテナによって読み取られたときに、製品がまだ内部にあり、それが第2のアンテナによってのみ読み取られるとき、製品はまだ外にあるからです。とにかく助けてくれてありがとう。本当にありがとう。 –

+0

申し訳ありませんが、私はかなり理解していません。アンテナID 'int'が空であることを意味しますか?これらのケースで上記の例の行を更新できますか? –

+0

私はそれを修正しました、オブジェクトがアンテナ番号2によってのみ読み取られた場合、製品はまだ外部にあり、受信していません。また、製品がアンテナ番号1でのみ読み取られた場合、製品はまだ内部にあり、外部には出ていません。修正を見るために私の新しい答えを見てください。 –

1

、あなたの助けマン

var productDirection = productEntries.Select(
        product => new 
         { 
          Product = product.Key, 
          IsIncoming = product.First().antena == 2 && product.Last().antena == 1, 
          IsOutgoing = product.First().antena == 1 && product.Last().antena == 2, 
          StillInside = product.First().antena == 1 
         }); 

       foreach (var product in productDirection) 
       { 
        if (product.IsIncoming) 
        { 
      // handle incoming products 
         Console.WriteLine("The product " + product.Product + " is incoming"); 
        } 

        else if (product.IsOutgoing) 
        { 
         // handle outgoing products 
         Console.WriteLine("The product " + product.Product + " is outgoing"); 
        } 
        else if (product.StillInside) 
        { 
      //handle still inside products 
         Console.WriteLine("The product " + product.Product + " is still inside"); 
        } 
        else 
        { 
      //handle still outside products 
         Console.WriteLine("The product " + product.Product + " is still outside"); 
        } 

       } 
関連する問題