如何搜索两个列表成员?

时间:2014-06-26 18:23:20

标签: c# string visual-studio-2010 list hashset

我有以下课程:

    public class fixFirstDuplicate
    {
        public string firstParam { get; set; }
        public string secondParam { get; set; }
    }

和列表:

public static List<fixFirstDuplicate> firstDuplicate = new List<fixFirstDuplicate>();

列表中充满了firstParam和secondParam的值,每个值彼此对应。它基本上是一个表,其中第一个firstParam与第一个secondParam相关联,依此类推。

然后我有:

List<string> conLines = new List<string>();

我想查看conLines,每次字符串包含firstParam和secondParam时,对该字符串执行一个方法。

如果我只使用一个列表执行此操作,比如firstParam,我会使用HashSet,但我不知道如何执行相同的操作,因为我有firstParam和secondParam

2 个答案:

答案 0 :(得分:1)

您需要检查conLines是否同时包含firstParamsecondParam

var query = firstDuplicate.Where(r => conLines.Contains(r.firstParam) &&
                                   conLines.Contains(r.secondParam));

编辑:如果您想在找到匹配项时调用方法并且订单对您很重要,那么您可以使用简单的foreach循环,如:

foreach (var item in firstDuplicate)
{
    string matchingString  = conLines.FirstOrDefault(r => 
                              (r.IndexOf(item.firstParam)>= 0 && 
                              r.IndexOf(item.secondParam) >= 0) &&
                              (r.IndexOf(item.firstParam) < 
                               r.IndexOf(item.secondParam)));

    if(matchingString != null)
    {
        //CallYourMethod(matchingString);
    }
}

答案 1 :(得分:1)

此代码:

  • 循环浏览要检查的所有字符串
  • 在空格上拆分字符串,删除空元素
  • 查找firstDuplicate列表中包含与输入字符串匹配的参数的所有条目
  • 将其添加到结果foundDuplicates

你必须要照顾:

  • conLines
  • 中字符串的有效性
  • 区分大小写
  • 处理每个字符串的多个结果和匹配多个字符串的条目

var foundDuplicates = new List<fixFirstDuplicate>();

foreach (var combinationToFind in conLines)
{
    // "They will be separated by at least one space."
    var parameters = combinationToFind.Split(new[] { ' ' },                  
                         StringSplitOptions.RemoveEmptyEntries);

    var duplicatesForCombination = firstDuplicate.Where(d => 
                                                d.firstParam == parameters[0]
                                            && d.secondParam == parameters[1]);

    foundDuplicates.AddRange(duplicatesForCombination);
}

现在,您可以为foundDuplicates中的每个条目调用您的方法。