首页 > 解决方案 > 如何使用 LINQ 有条件地创建新的字符串数组?

问题描述

我有一个字符串数组,如下所示:

string[] myStrings = new string[] {"P1111111F","N1111110","Z2","P1111111F","Z1111110"};

如何使用 LINQ 检查每个字符串的长度 = 8 并以“0”结尾以获得以下内容:

result: {"N","Y","N","N","Y"};

myStrings 使用重复字符串可能会更长,所以我想实现一个不重新处理已经考虑过的字符串的解决方案。

标签: c#linq

解决方案


直截了当的方法:

string[] results = myStrings
    .Select(s => s?.Length == 8 && s.EndsWith("0") ? "Y" : "N")
    .ToArray();

避免加倍算法的微优化方式ToArray

string[] results = new string[myStrings.Length];
for(int i = 0; i < myStrings.Length; i++)
{
    string s = myStrings[i];
    results[i] = s?.Length == 8 && s.EndsWith("0") ? "Y" : "N"; 
}

myStrings重复字符串可能会更长,所以我想实现一个不重新处理已经考虑过的字符串的解决方案。

我认为将这些结果缓存在例如 a 中Dictionary<string, string>根本没有帮助。检查是否如此简单和快速,以至于任何查找都会降低效率。你只会浪费内存。


推荐阅读