【问题标题】:How to test if a list contains part of a string如何测试列表是否包含字符串的一部分
【发布时间】:2011-06-25 03:21:47
【问题描述】:

我有一个数字列表,我必须检查一个字符串的多个或单个数字是否在该列表中。

例如,假设我有一个列表 list = new List<int> { 2, 3, 4, 5, ... } 和字符串 strSegment = "2,8"。尝试list.Contains(strSegment) 显然是行不通的。有什么方法可以在不分离strSegment 的情况下做到这一点?

这是我目前的代码:

List<string> matchedSegs = ...;
foreach (Common.Ticket tst in lstTST)
{
    string segNums = tst.SegNums;

    var result = segNums.Split(',');
    foreach (string s in result)
    {
        if (matchedSegs.Contains(s))
        {
            blnHKFound = true;
            break;
        }
        else
        {
            strSegsNotFound += tst.strAirSegNums;
            blnHKFound = false;
        }
    }
}

【问题讨论】:

  • 你能稍微扩展一下你的例子吗,你是在扫描列表中的数字序列吗?该列表是长字符串还是列表对象?
  • 在您的示例中,您是否在寻找 2 后跟 8?
  • 只是寻找“2”是否存在于“2,8”中,但“2”在列表字符串中
  • 我试图提高您问题的整体质量。 (说实话很糟糕)我尽我所能去理解它,但我无法解决所有问题。希望我没有改变你问题的意思。 从现在开始尝试写得更好,有很多人愿意提供帮助,但如果他们无法理解您所说的内容,将无法提供帮助。

标签: c# list contains


【解决方案1】:

好吧,您可以在不拆分 strNumber 的情况下做到这一点,但您还没有真正解释为什么需要这样做。我认为拆分然后使用Intersect 是最简单的方法,我建议先尝试一下,看看它是否适合您:

var result = strSegment.Split(',').Intersect(numbers);

这里有一个更完整的例子:

string strSegment = "2,8";
List<string> numbers = new List<string> { "2", "3", "4", "5" };
var result = strSegment.Split(',').Intersect(numbers);
foreach (string number in result)
{
    Console.WriteLine("Found: " + number);
}

【讨论】:

  • no linq :( 如果我的字符串部分在我的字符串列表中,则只是希望返回 true
  • @Sppoks:为什么不使用 LINQ?您使用的是 C# 2.0 吗?请更具体地说明您的要求,而不是它们不是
  • @Spooks:您的数据的输入格式是什么?例如,它是我在答案中猜到的List&lt;int&gt;,还是空格分隔的字符串?您可以发布到目前为止您尝试过的代码吗?我认为这会让事情变得更清楚。
  • @Spooks:我认为如果var 有效,那么您使用的是 C# 3.0 或更高版本,并且您可能确实有可用的 LINQ。尝试在文件顶部添加using System.Linq;,然后再次尝试我的答案。
  • 注意:如果您想查看未找到哪些号码,请使用Except 方法。
猜你喜欢
  • 1970-01-01
  • 2021-06-15
  • 2021-09-28
  • 2014-07-23
  • 1970-01-01
  • 2017-11-21
  • 2015-09-16
相关资源
最近更新 更多