我有一个字符串数组:
string[] initValue =
{"A=Test11,B=Test12,B=TestA,C=Test14,D=Test15",
"A=Test21,B=Test22,B=TestA,C=Test24,D=Test25",
"A=Test31,B=Test32,B=TestA,C=Test34,D=Test35"};
我需要以" B ="开头的独特价值观。并且不是" B = TestA",例如:
string[] resultValue =
{"Test12",
"Test22",
"Test32"};
如何使用Linq获得此结果?
答案 0 :(得分:3)
string[] result = initValue.Select(v => v.Split(','))
.SelectMany(v => v)
.Select(v => v.Split('='))
.Where(v => v[0] == "B" && v[1] != "TestA")
.Select(v => v[1]).Distinct().ToArray();
首先,您需要获取部分字符串
然后将结果集合减少为一
然后用“=”分割各个字符串,只选择那些“B”作为第一个值,而不选择“TestA”作为第二个。
然后选择第二个值并调用Distinct
,这将删除重复值。
答案 1 :(得分:0)
Domysee的答案很好。但是人们可以随时将正则表达式添加到混音中以获得乐趣。
var re = new Regex(@"B=(?<test>Test\d+)", RegexOptions.Compiled);
string[] resultValue = re.Matches( String.Join(",", initValue))
.OfType<Match>()
.Select(m => m.Groups["test"].Value)
.ToArray();
答案 2 :(得分:0)
以下是获得预期结果的另一种方法:
var resultValue = initValue
.SelectMany(s => s.Split(','))
.Where(x => x.StartsWith("B"))
.Where(s => s != "B=TestA")
.Select(a => a.Replace("B=", "")).ToList(); //or .ToArray();