0

2つList<String[]>の'(文字列配列リスト)があり、内容を何らかの条件で相互に一致させたいので、最終結果はtrueまたはfalseを返します。

List<string> TestA= {"A001","A002","A003","B001","B001","C003","D000","E001"};

List<string> TestB= {"A001","A002","A003","B999","C003"};

以下の条件の関数を書きたいのですが。

  1. TestAのすべてのアイテムがTestBと一致する場合(TestAでは、同じアイテムが複数回存在する可能性があります[例:B001])==>trueを返します
  2. TestBが数字999[ExB999]のアイテムを含む場合、testAのBで始まるアイテムをループする必要はなく(このセットはtrue)、TestAのループはC003から始まります[この場合、 ListBがB999を含む場合はListAからのB]。続行..TestAアイテムC003のループ実行。これはTestBのアイテムと一致し、再びtrueに設定されます。D000の場合、ListBのアイテムと一致しないため、最終的にboolがfalseに設定されてブレークします。
4

2 に答える 2

1

よくわかりませんが、これを確認してください:

var filter = 
    from b in TestB
    where b.Contains("999")
    select b.Replace("999", "");

var cleaned = 
    from a in TestA
    where !filter.Any(f => a.StartsWith(f))
    select a;

var check = cleaned.Distinct()
                   .Except(TestB).Any();

編集

詳細な仕様から、接頭辞に複数の文字が含まれている可能性があることを理解しているため、回答を編集しました。

于 2012-10-04T20:28:58.547 に答える
1

LINQ を使用するために必要なものは次のとおりです。

// Condition 2:
// Get the characters of in list B that contains the "999" string. 
var badOnes = ListB.Where(s=>s.Contains("999").Select(s=>s[0])

// If there is any forbidden characters remove them from List A
if (badOnes.Length > 0)
{
    ListA.RemoveAll(x => x[0] == badOnes.Exists(c => c == x));
}

// Condition 1:
if (ListA.Distinct().Intersect(ListB).Length == ListA.Distinct().Length)
{
    return true;
}

お役に立てれば。

于 2012-10-04T20:21:01.290 に答える