-4

私は2つのリストを持っています:(注:リストのアイテムは「NAME」と「ID」の組み合わせです)

List<string> ListA = new List() {"SAM001","SAM002","SAM003","PIT001","PIT002","PIT004","ROSE001","ROSE002","JASE001" };
//so on

List<string> ListB = new List() {"SAM001","SAM003","PIT000","ROSE002","JASE001","INDI000"};` 
//so on...

これらの2つのリストに基づいて、listCommonとlistUncommonの2つの新しいリストを作成します。

listCommonには、ListAとListBの一致するすべてのアイテムが含まれます。

listUnCommonには、ListAの残りのすべてのアイテムが含まれます

これで、私の条件は、ListBの任意のアイテムにNAME + 000がある場合、その名前で始まるListAのすべてのアイテムをlistCommonに追加する必要があるということです。

例1:ListBアイテムがPIT000で、ListAアイテムがPIT001、PIT002、PIT003、ABC001の場合、ListBには000のPITがあるため、listCommon = PIT001、PIT002、PIT003です。

上記のリストと私の状態のように、私は以下の最終的なリストが欲しいです

List<string> listCommon = new List() {"SAM001","SAM003", "PIT001","PIT002","PIT004","ROSE002", "JASE001" };
List<string> listUncommon = new List() {"SAM002", "ROSE001"};

提案してください..私はループで数分を過ごしますが、私が述べたように実際の結果は得られません:(

4

2 に答える 2

4

これは機能するはずです。

var common = ListA.Intersect(ListB)
    .Concat(
        ListA.Where(a => 
             ListB.Any(
                b => b.EndsWith("000") && 
                b.StartsWith(a.Substring(0, a.Length - 3))
             )
        )
    );
var uncommon = ListA.Except(common);

挿入を使用して、リストAから任意のものを選択します。リストBには、最初の3文字に一致し、000で終わるエントリがあります。

これはこれを行うための最も効率的な方法ではありませんが、コード的には簡潔です。

于 2012-10-05T20:42:10.927 に答える
0

2つのリストから一般的なアイテムを見つける:

var listCommon = list1.Intersect(list2);

更新-差し引かれたアイテム:

var subtractedItems = new HashSet(listCommon);
commonItems.ExceptWith(list1);
于 2012-10-05T20:35:47.940 に答える