0

我有两个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 中相同的项目可以多次 [ex. B001])==> 返回 true
  2. 如果 TestB 包含任何具有数字 999 [Ex B999] 的项目,则无需循环在 testA 中以 B 开头的项目(此设置为 true)并且 TestA 的循环从 C003 开始​​ [在这种情况下,我认为我们需要删除所有项目如果 ListB 包含 B999,则来自 ListA 的 B]。继续.. 循环运行 TestA 项目 C003。这与 TestB 中的项目匹配再次设置为 true 现在对于 D000 不匹配 ListB 中的项目现在最终 bool 设置为 false 并中断。
4

2 回答 2

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 回答
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 回答