首页 > 解决方案 > 将短名称转换为完整名称

问题描述

我有一个List<string>

List<string> ListaClientes = new List<string>();
ListaClientes.Add("CERTIFIC ENERGÉT");
ListaClientes.Add("EDIFÍCIO INDUSTRIAL");

我有一个TextBox1读取 Excel 单元格的文本框 ( )。我有另一个文本框 ( TextBox2),我想在列表中显示长名称。例如,如果TextBox1display CE,它必须显示 on TextBox2 CERTIFIC ENERGÉT。如果TextBox1显示EI,它必须显示在TextBox2 EDIFÍCIO INDUSTRIAL

我怎样才能做到这一点?谢谢你。

标签: c#stringlist

解决方案


对于给定的List<string>

  List<string> ListaClientes = new List<string>() {
    "CERTIFIC ENERGÉT",
    "EDIFÍCIO INDUSTRIAL",
  };

让我们构建一个Dictionary<string, string>whereKey是用户输入 ( TextBox1.Text) 的地方,比如"CE"Value是一个相应的文本"CERTIFIC ENERGÉT"

 {
   {"CE", "CERTIFIC ENERGÉT"},
   {"EI", "EDIFÍCIO INDUSTRIAL"},
 }

如果您希望缩写作为键,您可以使用正则表达式

  using System.Text.RegularExpressions;

  ...

  // Extracts all capital letters from each word
  Func<string, string> abbreviation = (value) => string.Concat(Regex
    .Matches(value, @"\b\p{Lu}")
    .Cast<Match>()
    .Select(match => match.Value));

  Dictionary<string, string> dict = ListaClientes
    .GroupBy(item => abbreviation(item), StringComparer.OrdinalIgnoreCase)
    .ToDictionary(group => group.Key,
                  group => group.First(), // In case of conflict, use 1st text
                  StringComparer.OrdinalIgnoreCase);

然后,您可以轻松映射:

 TextBox2.Text = dict.TryGetValue(TextBox1.Text.Trim(), out var text) 
   ? text            // we have a corresponding text
   : TextBox1.Text;  // we don't have corresponding text, let's repeat TextBox1.Text

推荐阅读