You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串单词搜索匹配问题:位置变化时无法正确识别相同单词

问题分析及解决方案

你的代码存在两个核心问题,导致无法正确识别不同位置的相同单词:

  1. 字符串分割错误:原字符串用, (逗号加空格)分隔单词,但你用Split()默认按空格分割,会得到带逗号的错误单词(比如ірис,),导致Contains判断失效。
  2. 逻辑效率低下且不准确:遍历每个元素的单词再逐个检查是否在所有字符串中,不仅重复计算,还可能因为子串匹配出现误判。

修正后的代码

using System;
using System.Collections.Generic;
using System.Linq;

class Garders
{
    public string flower { get; set; }
    public Garders(string flowerStr)
    {
        flower = flowerStr;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = System.Text.Encoding.Unicode;
        Console.InputEncoding = System.Text.Encoding.Unicode;

        var gardenList = new List<Garders>()
        {
            new Garders("ірис, троянда, айстра, півонія, жоржин"),
            new Garders("ірис, троянда, айстра, півонія, жоржин, хризантема, гладіолус"),
            new Garders("ірис, троянда, айстра, півонія, гладіолус")
        };

        // 将每个花园的花卉字符串转换为单词集合
        var flowerSets = gardenList.Select(g => 
            new HashSet<string>(g.flower.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries))
        ).ToList();

        // 计算所有集合的交集,即所有花园都存在的花卉
        var commonFlowers = flowerSets.Aggregate((currentSet, nextSet) => 
        {
            currentSet.IntersectWith(nextSet);
            return currentSet;
        });

        // 输出结果
        Console.WriteLine("所有花园共有的花卉:");
        foreach (var flower in commonFlowers)
        {
            Console.WriteLine(flower);
        }
    }
}

关键改进点

  • 正确分割字符串:使用, 作为分隔符,配合StringSplitOptions.RemoveEmptyEntries去除空元素,确保得到干净的单词列表。
  • 使用集合求交集:利用HashSet的IntersectWith方法高效计算多个集合的交集,自动忽略单词位置,直接找出所有共同存在的单词。
  • 简化逻辑结构:去掉冗余的枚举器操作,用LINQ简化集合转换和交集计算,代码更易读维护。

内容的提问来源于stack exchange,提问作者Exavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:55:19