C# List<(string,string)> 匹配和替换值
Posted
技术标签:
【中文标题】C# List<(string,string)> 匹配和替换值【英文标题】:C# List<(string,string)> matching and replacing values 【发布时间】:2020-10-24 14:08:45 【问题描述】:我会尽量简单地解释这一点,这是一个非常具体的问题。我已经使用 F# 一段时间了,这可能会让我感到困惑。我想要做的基本上(或接近)一个典型的递归匹配语句,但我在 C# 中这样做。
我有一个列表(字符串 s1,字符串 s2),我将其命名为 list1。这由标签和真值组成。
示例: “伟大的事业”,“1”; “超敏感”,“2”; "增加针对性", "3" “更敏感”,“4”;
然后我有另一个列表,我将调用 List2。这是部分字符串的列表。例如:
“原因”; “更大”; “超”; “针对性”
我想匹配 list1(字符串 s1,字符串 s2)并将 List2 字符串(或生成新列表)替换为 s2 值,其中 s1.contains(List2)。
因此,使用与上述相同的示例,我的最终目标将是具有以下值的列表: “1”; “4”; “2”; “3”
编辑: 我想在某些方面这有点像使用我的 List1 作为查找表,如果这是一个 SQL 查询,我想获取实际值而不是查找代码(在这种情况下,字符串是查找代码,数字是真实值)
【问题讨论】:
【参考方案1】:您可以将 LINQ 与 Where
和 Select
一起使用,如下所示:
var list1 = new List<(string, string)>
("great cause", "1"), ("hyper sensitive", "2"), ("increased pertinance", "3"), ("greater sensitive", "4")
;
var list2 = new List<string>"cause", "greater", "hyper", "pertinance"; // fixed typos from the post.
var result = list2
.Where(s => list1.Any(t => t.Item1.Contains(s)))
.Select(s => list1.First(t => t.Item1.Contains(s)).Item2)
.ToList();
Console.WriteLine(string.Join(", ", result)); // prints "1, 4, 2, 3"
【讨论】:
太完美了,正是我想要的,谢谢。 @Anthonyder 很乐意提供帮助!【参考方案2】:我认为在您的情况下,最好的办法是使用 l1 字典,例如:
var l2 = new string[] "cause", "greater", "hyper", "pertinance" .ToList();
dic.Add("great cause", "1");
dic.Add("hyper sensitive", "2");
for (int i = 0; i < l2.Count; i++)
l2[i] = dict1.FirstOrDefault(x => x.Key.Contains(l2[i])).Value;
【讨论】:
以上是关于C# List<(string,string)> 匹配和替换值的主要内容,如果未能解决你的问题,请参考以下文章
C#中List〈string〉和string[]数组之间的相互转换