簡體   English   中英

比較清單 <String[]> 有多個條件

[英]Compare List<String[]> With Multiple Conditions

我有兩個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 [Ex B999]的項目,那么就不需要循環在testA中以B開頭的項目(此設置bool為true)並且TestA的循環從C003開始[在這種情況下我認為我們需要刪除所有項目如果ListB占據B999,則來自ListA的B. 繼續..所以循環運行TestA項目C003。 這與TestB中的項目匹配再次設置為真現在D000不匹配ListB中的項目現在最終bool設置為false並且中斷。

以下是使用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;
}

希望這可以幫助。

不確定我明白了,但檢查一下:

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();

編輯

根據您的進一步說明,我了解您的前綴可能有多個字母,所以我編輯了我的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM