【问题标题】:Find how many entries in a string are in another string找出一个字符串中有多少条目在另一个字符串中
【发布时间】:2021-10-28 06:38:20
【问题描述】:

如果StringOne 是:

Cat
Cat
Bird
Dog

如果StringTwo 是,我将如何获得三个中的3

Cat
Bird
public static void FindNumberOfSimilarStrings()
{
    string[] var = StringOne();
    foreach(string line in StringTwo())
    {
        foreach(string entry in var)
        {
            if (input.IndexOf(line, StringComparison.OrdinalIgnoreCase) >= 0)
        {
            Console.WriteLine(line);
            instances++;
        }
    }
}

注意:上面的代码需要使 StringTwo 可以独立于程序进行扩展。这意味着StringTwo实际上是一个文件,其数据是通过这个获得的:

public static string[] StringTwo()
{
    return File.ReadAllLines(path);
}

StringOne 这样:

public static string[] StringOne()
{
    return Program.textVariable.Split(' ');
}

文本的原始字符串是“Cat cat bird dog”,由于有拆分功能,应该这样处理。我也希望这忽略大小写。

Cat
Cat
Bird
Dog

只要有解决方案允许这样做就可以了。

【问题讨论】:

  • 行尾重要吗? at 是否可以在列表中找到? bird dog 呢? “必须以这种特定方式完成。” 是什么意思?您是否考虑过string.Equals 而不是IndexOf
  • @Flydog57 换行符中的行尾很重要。在StringOne 中找不到at,但在StringTwo 中找不到。我将在后期编辑中详细说明其余部分。谢谢你的帮助,我真的需要这个。
  • 告诉我你想要的结果
  • @MasoudAndalibi 感谢您的提议!我想要的结果是找出一个列表中有多少个字符串实例可以在另一个列表中找到。更多信息在帖子中。再次感谢!

标签: c# io


【解决方案1】:

更新

考虑到您只想知道第一个集合中的单个字符串有多少实例发生在第二个字符串集合中。

var firstStrArray = new string[] { "Cat", "Cat", "Bird", "Dog" };
var secondStrArray = new string[] { "Cat", "Bird" };

var firstStrArrayGroups = firstStrArray.GroupBy(row => row.Trim()).Select(row => new { row.Key, Count = row.Count() }).ToList();
var secondStrArrayGroups = secondStrArray.GroupBy(row => row.Trim()).Select(row => new { row.Key, Count = row.Count() }).ToList();

foreach (var item in firstStrArrayGroups)
{
    if (!secondStrArrayGroups.Any(row => row.Key.ToLower() == item.Key.ToLower()))
    {
        Console.WriteLine($"No Instance of => {item.Key} occured in second array.");
        continue;
    }

    Console.WriteLine($"{secondStrArrayGroups.FirstOrDefault(row => row.Key.ToLower() == item.Key.ToLower()).Count} Instance of => {item.Key} occured in second array.");
}

结果会是:

最后一种方法向您展示了两个集合中出现了多少个字符串实例,对造成的误解表示歉意。

我有点过火了,并添加了一些细节,例如 Trim()ToLower(),如果它们与您的业务不匹配,请将它们删除。

【讨论】:

  • 感谢您的意见!如果这可行,我会接受答案。
  • 这本身就很好用,但是当我合并我自己的行分隔 StringTwoStringOne 时,StringTwo 中的所有值都返回一个,无论它是否在 StringOne 中找到不止于此或永远不会。我该如何解决这个问题?
  • 哎呀!忘了提你@MasoudAndalibi
  • 更新:我修复了 StringOne 中的项目返回值的问题,但即使 StringTwo 中不存在其他所有项目仍会返回一个值。我该怎么办?
  • 感谢您的编辑!这很有帮助,肯定会使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2013-02-11
  • 1970-01-01
  • 2018-10-03
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多