1

たとえば、次のようになります。

var a = new List<int>(){ 1 , 2 , 50 };
var b = new List<int>(){ 9 , 7 , 2 };

aそれらの起源(または)を示すデータを追加しながら、それらを1つの並べ替えられたリストにマージする必要がありますb。たとえば、出力は次のようになります。

mergedList = { {1,false},{2,false},{2,true},{7,true},{9,true},{50,false} }

trueから来ることを意味しますa)。

編集開始...

mergedList =
{ {1,IsB=false},{2,IsB=false},{2,IsB=true},{7,IsB=true},{9,IsB=true},{50,IsB=false} }

...編集終了

どうすればLINQ、できればクエリステートメント形式(from ... select ...)でそれを行うことができますか?

4

4 に答える 4

4

フォームを照会しませんが、機能するはずです。

var ans = a.Select(i => new { Value = i, FromA = true })
           .Concat(b.Select(i => new { Value = i, FromA = false }))
           .OrderBy(i => i.Value); 
于 2013-02-19T13:08:06.860 に答える
3

追加のプロパティを使用して匿名タイプを作成できます。

var a = new List<int>(){ 1 , 2 , 50 };
var b = new List<int>(){ 9 , 7 , 2 };
var ax = a.Select(i => new{ Num = i, FromB = false });
var bx = b.Select(i => new{ Num = i, FromB = true});

var merged = ax.Concat(bx).OrderBy(x => x.Num);  

重複を排除するわけでEnumerable.Concatはありませんが、原点を追加したいので、これが望ましいと思います。

出力:

foreach(var x in merged)
    Console.WriteLine("Num: {0} From-B? {1}", x.Num, x.FromB);

デモ

于 2013-02-19T13:09:21.743 に答える
2
var aItems = from aa in a
             select new {Value = aa, Indicator = true};
var bItems = from bb in b
             select new {Value = bb, Indicator = false};

var result = aItems.Concat(bItems).OrderBy(t => t.Value);

そして純粋メソッド構文:

var aItems = a.Select(aa => new {Value = aa, Indicator = true});
var bItems = b.Select(bb => new {Value = bb, Indicator = false});
var result = aItems.Concat(bItems).OrderBy(t => t.Value);
于 2013-02-19T13:07:36.313 に答える
1

私はあなたが匿名のタイプでこれを行うことができると思います:

var mergedList = a.Select(x => new {val = x, tag = true})
                  .Union(b.Select(x => new {val = x, tag = false}))
                  .OrderBy(x => x.val);
于 2013-02-19T13:14:35.990 に答える