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 与 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"
我认为在你的情况下最好的选择是使用 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;
}
我会尽可能简单地解释这个问题,这是一个非常具体的问题。我使用 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 与 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"
我认为在你的情况下最好的选择是使用 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;
}