什么是更有效/更整洁的方法来分解这个字符串
本文关键字:分解 字符串 方法 有效 什么 | 更新日期: 2023-09-27 17:56:24
我正在尝试将这根字符串分解为 2 种颜色,并想知道是否有更整洁的方法来实现相同的结果?
// Obtain colour values
string cssConfig = "primary-colour:Red, secondary-colour:Blue";
var parts = cssConfig.Split(',');
var colour1 = parts[0].Split(':')[1];
var colour2 = parts[1].Split(':')[1];
你可以使用正则表达式
string cssConfig = "primary-colour:Red, secondary-colour:Blue";
var reg = new Regex(@"(['w'-]+)':(['w'-]+)");
foreach (Match match in reg.Matches(cssConfig))
{
}
你也可以用 LINQ 做一些事情
var cssConfigDict = cssConfig.Split(',')
.Select(x => x.Split(':'))
.ToDictionary(x => x.FirstOrDefault(), y => y.LastOrDefault());
LINQ 可能有更好的方法!
正则表达式绝对是一种可能性,尽管它是"更整洁"还是更具可读性取决于个人喜好和您阅读正则表达式的能力。如果它的实际用例真的只是读取这两种颜色而不是任意数量的颜色,那么我可能会保留原始解决方案。意图非常明确,同时保持代码简单,如果正则表达式不是您的强项,则可以避免细微的错误。
LINQ 可能是最具可读性的变体,它可以轻松读取多个键值对,同时仍使用简单的拆分机制来分析数据。
根据我的经验,为了可维护性,您绝对应该避免为如此小而简单的问题编写一个非常复杂,通用且看似"整洁"的解决方案。
您可以使用 LINQ 方法:
var colors = cssConfig.Split(',').Select(x => x.Split(':').Skip(1).Take(1));
话虽如此,我会坚持你的方法。这是每个人都能理解的清晰代码。正则表达式版本和 LINQ 版本更加晦涩难懂...
检查它是否与您的要求类似,以从字符串中获取字典对象
正则表达式到 Linq 到 C# 中的字典
string input = "abc:1|bbbb:2|xyz:45|p:120";
string pattern = @"(?<Key>[^:]+)(?:':)(?<Value>[^|]+)(?:'|?)";
Dictionary<string, string> KVPs
= ( from Match m in Regex.Matches( input, pattern )
select new
{
key = m.Groups["Key"].Value,
value = m.Groups["Value"].Value
}
).ToDictionary( p => p.key, p => p.value );
foreach ( KeyValuePair<string, string> kvp in KVPs )
Console.WriteLine( "{0,6} : {1,3}", kvp.Key, kvp.Value );
/* Outputs:
abc : 1
bbbb : 2
xyz : 45
p : 120
*/
如果您知道顺序将始终相同。无论如何,您的解决方案都需要工作,您可以执行以下操作:
// Obtain colour values
string cssConfig = "primary-colour:Red, secondary-colour:Blue";
var parts = cssConfig.Split(',',':');
var colour1 = parts[1];
var colour2 = parts[3];