【问题标题】:Ordering List<string> that contains keywords from a template c#包含来自模板 c# 的关键字的排序列表<string>
【发布时间】:2018-08-08 03:33:57
【问题描述】:

我有问题。我需要基于模板订购一个C#List&lt;string&gt;,但是模板只包含了字符串的一部分,所以它必须是Contains()。 模板类似于:

House
Vehicle
Electric

输入类似:

Electric bike
Household appliances
Electricity
Electric generator
Vehicle appliances

有序列表应该是这样的:

Household appliances
Vehicle appliances
Electric bike
Electricity
Electric generator

有什么可以帮助我的吗?

【问题讨论】:

  • 您可以编写自定义比较器,请参见:stackoverflow.com/a/4003849/1037841 和/或此stackoverflow.com/questions/3007470/… 比较器将检查两个元素是否包含关键字,然后决定先出现的那个。问:在您的场景中,如果字符串是 Vehicle House Electric(包含您的所有模板内容)怎么办?
  • 感谢您的回复,我会检查这些问题,对于您的场景,它会列在 Vehicle 下,因为它以开头

标签: c# string list


【解决方案1】:

您必须实现自定义比较器

public class CustomStringComparer : IComparer<string>
{
    List<string> templates = new List<string> { "House", "Vehicle", "Electric" };
    public int Compare(string x, string y)
    {
        string xTemplate = templates.FirstOrDefault(t => x.Contains(t));
        string yTemplate = templates.FirstOrDefault(t => y.Contains(t));
        int xTemplateIndex = templates.IndexOf(xTemplate);
        int yTemplateIndex = templates.IndexOf(yTemplate);
        return xTemplateIndex.CompareTo(yTemplateIndex);
    }
}

然后你可以将这个比较器传递给 Sort()

List<string> input = new List<string>
{
    "Electric bike",
    "Household appliances",
    "Electricity",
    "Electric generator",
    "Vehicle appliances"
};

input.Sort(new CustomStringComparer());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2023-01-12
    • 2011-04-12
    相关资源
    最近更新 更多