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

C# List<(string,string)> matching and replacing values

我会尽可能简单地解释这个问题,这是一个非常具体的问题。我使用 F# 有一段时间了,这可能让我感到困惑。我想做的基本上是(或接近于)典型的递归匹配语句,但我是在 C# 中做的。

我有一个列表(字符串 s1,字符串 s2),我将其称为列表 1。这由标签和真实值组成。

示例: “伟业”,“1”; “过度敏感”,“2”; “增加针对性”,“3” “更敏感”,“4”;

然后我有另一个列表,我将调用 List2。这是部分字符串的列表。例如:

“原因”; “更大”; “超”; “针对性”

我想匹配 list1(字符串 s1,字符串 s2)并用 s2 值替换 List2 字符串(或生成新列表),其中 s1.contains(List2).

因此,使用与上述相同的示例,我的最终目标将是具有以下值的列表: “1”; “4”; “2”; “3”

编辑: 我想在某些方面这有点像使用我的 List1 作为查找 table 如果这是一个 SQL 查询,我想获得实际值而不是查找代码(在这种情况下是字符串是查找代码,数字是真实值)

您可以将 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"

我认为在你的情况下最好的选择是使用 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;
           }