C# 如何比较行(一行随机序列)

C# 如何比较行(一行随机序列),c#,comparison,C#,Comparison,我想比较两行,但其中一行是随机序列。我使用文本框,如下所示: 文本框1: 朋友们 伙伴 大象 文本框2: aspl 现在,当我按下按钮时,我希望Textbox3显示以下内容: 文本框3: 伙伴 到目前为止,我得到的是: Textbox3.Clear(); string[] lines1 = Textbox2.Lines; foreach (string line1 in lines1) {

我想比较两行,但其中一行是随机序列。我使用文本框,如下所示:

文本框1:
朋友们
伙伴
大象

文本框2:
aspl

现在,当我按下按钮时,我希望Textbox3显示以下内容:

文本框3:
伙伴

到目前为止,我得到的是:

            Textbox3.Clear();
            string[] lines1 = Textbox2.Lines;
            foreach (string line1 in lines1)
            {
                string[] lines = Textbox1.Lines;
                foreach (string line in lines)
                {
                    if (line.Contains(line1))
                    {

                        Textbox3.Text += line;
                        Textbox3.Text += "\r\n";
                    }
                }

             }
但是,如果Textbox1和Textbox2中的行完全相同,而不仅仅是字符完全相同,则这将仅将该行复制到Textbox3


所以我的问题是:我如何做到这一点?

我会反复浏览这两个列表。如果字符串的长度相同,请继续(潜在匹配)。给定一个可能的匹配(相同的字符串长度),然后遍历源字符串中的字符,并确保每个字符都存在于要比较的字符串中。

您必须生成随机输入的所有可能排列,然后将每个字符与数据进行比较。就像Nathaniel说的,你可以通过先检查长度来优化它

有关生成字符串排列的代码,请参阅(您将希望获得随机输入字符串的所有字符排列)

编辑


问题的答案是:有一个更适合您需要的置换生成器。只需将
List
参数添加到
go
setper
方法中,并替换
Console.Write(List)显示
结果。添加(列表)
。当该方法返回时,您提供的列表将包含所有排列。

我的方法是

  • 计算目标单词(textbox2)的每个字母出现的次数
  • 循环浏览您拥有的可能条目列表(textbox1)
  • 计算您可能输入的每个字母出现的次数
  • 如果匹配,则将word保存到textbox3,如果不匹配,则继续
  • 如前所述,为了使此过程更快,请先计算可能单词的字符串长度,如果不匹配,则放弃此单词并继续下一个单词


    另一个增强功能是,在计算可能条目的字母时,如果发现目标单词中没有字母,则放弃,继续下一个单词。

    只需对字符串进行排序,并比较结果,假设它们的长度相等且不为空。此功能:

        private static bool IsPermutation(string one, string two)
        {
            var oneSorted = String.Join("", one.OrderBy(c => c).Select(x => x.ToString()).ToArray());
            var twoSorted = String.Join("", two.OrderBy(c => c).Select(x => x.ToString()).ToArray());
    
            return oneSorted == twoSorted;
        }
    
    编辑:回答评论。将该方法添加到类中,并用替换foreach中的代码

    if (line.Length == line1.Length && IsPermutation(line, line1)) 
    {
       Textbox3.Text += line;
       Textbox3.Text += "\r\n";                    
    }
    

    是否仅复制顺序相同的行?还是要忽略行的顺序以及字符?他没有说明是否关心行的顺序。我知道现有的代码要求它们的顺序相同,但这并不意味着这就是OP真正想要的。顺便说一句,我没有否决投票……除非从字符串中删除匹配的字符,否则将失败。如果不匹配,则aabc将与abbc匹配(aabc中的每个字符都存在于abbc中,且字符串长度相等)。无否决票,因为这将起作用。但你绝对不必这么做。更快的方法是计算字符并将它们填入char->count的字典中,然后比较字典。想想看,分类列表也可以。我同意,对于任何长度相当大的字符串,排列速度都会非常慢。我打赌这是可行的,但它太复杂了,我无法让代码对我有任何意义。这看起来很好,但你能解释一下如何使用它吗?