【问题标题】:How to determine if a string contains any matches of a list of strings如何确定字符串是否包含字符串列表的任何匹配项
【发布时间】:2011-03-23 22:23:46
【问题描述】:

你好,我有一个字符串列表:

var listOfStrings = new List<string>{"Cars", "Trucks", "Boats"};

我有一个带有名称字段的车辆选项。

我想查找名称与 listOfStrings 中的一项匹配的车辆。

我正在尝试使用 linq 执行此操作,但目前似乎无法完成。

var matchingVehicles = Vehicles.Where(v => v.Name == one of the listOfStringItem)

谁能帮我解决这个问题?

【问题讨论】:

    标签: c# asp.net linq


    【解决方案1】:
    Vehicles.Where(v => listOfStrings.Contains(v.Name))
    

    【讨论】:

    • 这适用于非常短的字符串列表,但扩展性很差。
    【解决方案2】:

    使用HashSet 而不是List,这样您就可以查找字符串而无需遍历列表。

    var setOfStrings = new HashSet<string> {"Cars", "Trucks", "Boats"};
    

    现在您可以使用Contains 方法高效地查找匹配项:

    var matchingVehicles = Vehicles.Where(v => setOfStrings.Contains(v.Name));
    

    【讨论】:

      【解决方案3】:

      这行得通吗:

      listOfStrings.Contains("Trucks");
      

      【讨论】:

        【解决方案4】:
        var m = Vehicles.Where(v => listOfStrings.Contains(v.Name));
        

        【讨论】:

          【解决方案5】:

          您可以执行Inner Join:

          var matchingVehicles = from vehicle in vehicles
                                 join item in listOfStrings on vehicle.Name equals item
                                 select vehicle;
          

          【讨论】:

            【解决方案6】:
            Vehicles.Where(vehicle => listOfStrings.Contains(vehicle.Name))
            

            【讨论】:

              【解决方案7】:

              检查字符串是否包含以下字符之一(布尔输出):

              var str= "string to test";
              var chr= new HashSet<char>{',', '&', '.', '`', '*', '$', '@', '?', '!', '-', '_'};
              bool test = str.Any(c => chr.Contains(c));
              

              【讨论】:

                猜你喜欢
                • 2023-03-27
                • 2011-05-10
                • 2018-03-06
                • 2020-07-31
                • 2019-06-05
                • 2015-03-24
                • 2014-10-08
                • 2014-08-09
                相关资源
                最近更新 更多