从关联数组 c# 中检索值
Retrieving value out of Associative array c#
我陷入了下一个问题。
我从包含以下内容的文本文件中读取了一行:
(("ITEM" "05") ("NUMBER" "1") ("DESCRIPTION" "*RECHTE INSTEEKKOP. 1/4\"-8MM") ("ARTICLENUMBER" "S110010000104"))
在 Lisp 中,这是一个列表,用于在 Lisp 中检索例如 ITEM
的值:
(cadr (assoc "ITEM" str))
这给出 05
如何在 C# 中简单地实现这一点?
您可以使用 Regex 来解析值,然后获取结果。例如,
var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
.Cast<Match>()
.Select(x=>new {Key = x.Groups["Key"].Value,Value = x.Groups["Value"].Value,});
这将为您提供如下合集
您现在可以使用 Linq 获取键等于 "ITEM" 的值。
var itemValue = valueCollection.First(x=>x.Key=="ITEM").Value;
或者,您可以将字符串转换为字典,如
var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
.Cast<Match>()
.ToDictionary(x=>x.Groups["Key"].Value,y=>y.Groups["Value"].Value);
您现在可以将所需的 ITEM
值解析为
var itemValue = valueCollection["ITEM"];
根据评论更新
如果您期望空值,您可以使用以下正则表达式模式。
@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.*?(?=""))""\)"
另一种方法是使用 Split
函数
string values = "((\"ITEM\" \"05\") (\"NUMBER\" \"1\") (\"DESCRIPTION\" \" * RECHTE INSTEEKKOP. 1 / 4\" - 8MM\") (\"ARTICLENUMBER\" \"S110010000104\"))";
var keyValuePairs = values.Split(new[] { "(", ")", " (", ") " }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Split(new[] { ' ' }, 2))
.ToDictionary(x => x[0].ToString(), x => x[1].ToString());
输出
我陷入了下一个问题。
我从包含以下内容的文本文件中读取了一行:
(("ITEM" "05") ("NUMBER" "1") ("DESCRIPTION" "*RECHTE INSTEEKKOP. 1/4\"-8MM") ("ARTICLENUMBER" "S110010000104"))
在 Lisp 中,这是一个列表,用于在 Lisp 中检索例如 ITEM
的值:
(cadr (assoc "ITEM" str))
这给出 05
如何在 C# 中简单地实现这一点?
您可以使用 Regex 来解析值,然后获取结果。例如,
var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
.Cast<Match>()
.Select(x=>new {Key = x.Groups["Key"].Value,Value = x.Groups["Value"].Value,});
这将为您提供如下合集
您现在可以使用 Linq 获取键等于 "ITEM" 的值。
var itemValue = valueCollection.First(x=>x.Key=="ITEM").Value;
或者,您可以将字符串转换为字典,如
var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
.Cast<Match>()
.ToDictionary(x=>x.Groups["Key"].Value,y=>y.Groups["Value"].Value);
您现在可以将所需的 ITEM
值解析为
var itemValue = valueCollection["ITEM"];
根据评论更新
如果您期望空值,您可以使用以下正则表达式模式。
@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.*?(?=""))""\)"
另一种方法是使用 Split
函数
string values = "((\"ITEM\" \"05\") (\"NUMBER\" \"1\") (\"DESCRIPTION\" \" * RECHTE INSTEEKKOP. 1 / 4\" - 8MM\") (\"ARTICLENUMBER\" \"S110010000104\"))";
var keyValuePairs = values.Split(new[] { "(", ")", " (", ") " }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Split(new[] { ' ' }, 2))
.ToDictionary(x => x[0].ToString(), x => x[1].ToString());
输出