我有一个名称列表,我想将其缩写,但是我想知道是否存在内置函数。
例如:
John Doe -> JD
Jane -> J
我正在尝试以下方法:
myListOfNames.ForEach(x => x = abbreviate(x));
我知道我可以创建自己的函数来进行缩写,但是有没有更好的方法使用内置函数呢?
答案 0 :(得分:1)
如果只考虑大写字母,则可以仅使用Linq
string.Join("", "John McDonald"
.Split(' ')
.Select(w => w.First())
.Where(c => char.IsUpper(c)));
//John McDonald = JM; Baron van Munchausen = BM
答案 1 :(得分:1)
您可以执行以下操作:
var result = name.Split(' ')
.Select(s => s.First())
.ToArray());
答案 2 :(得分:1)
使用空格将您的姓名分隔开,然后选择每个分隔字符串的首字母。
尝试使用linq,
List<string> myListOfNames = new List<string>();
myListOfNames.Add("John Doe");
myListOfNames.Add("John S Doe");
var abbrs = myListOfNames.Select(x => string.Join("", x.Split(' ').Select(y => y.FirstOrDefault()))).ToList();
注意:假设您的名字用空格分隔。
输出:(来自调试器)
答案 3 :(得分:1)
首先,我们应详细制定规则,例如:
1
大写字母(单词是空格之间的字符 )von
)D
中使用最后一个一个:McDonald
实施:
Func<string, string> abbreviation = (name) => string.Concat(name
.Split(' ') // split to words
.Select(word => word
.Where(c => char.IsUpper(c)) // only capital letters matter
.LastOrDefault()) // take the last
.Where(c => c > 0)); // if word doesn't have capital letter, drop it
...
string result = abbreviation("John McDonald");
演示:
string[] Tests = new string[] {
"John McDonald",
"Baron von Munchausen",
"Charles de Batz de Castelmore d'Artagnan"
};
string report = string.Join(Environment.NewLine, Tests
.Select(test => $"{test,-50} -> {abbreviation(test)}"));
Console.Write(report);
结果:
John McDonald -> JD
Baron von Munchausen -> BM
Charles de Batz de Castelmore d'Artagnan -> CBCA