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 与 WhereSelect 一起使用,如下所示:

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# Tuple 创建一个新二元集合

关于 C# 中list<string> 的用法

C#中List<List<string>>要怎么处理?

C#中List〈string〉和string[]数组之间的相互转换

如何在 .NET 6 / C# 10 中将 List<String?> 转换为 List<String>?

C# List<(string,string)> 匹配和替换值