如何通过Linq获取字符串数组中的不同值?

时间:2016-03-09 18:59:52

标签: c# linq

我有一个字符串数组:

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获得此结果?

3 个答案:

答案 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();