多个字符串中的不同字符

时间:2012-02-19 12:47:46

标签: c# .net linq c#-4.0

我正试图在列表中的所有字符串中获得一个独特的字符列表(区分大小写)。

我有一个包含3个字符串的列表:

"AABbDDCCRRFF"
"JOJaCK"
"BILLY"

输出应该是(字符的顺序并不重要):

ABDCRFJOKaILYb

我知道下面的内容有问题,但无法解决:

            distChars = (from string row in valuesList[c]
                         select row.Distinct()
                         ).Distinct().ToString();

有没有人知道如何从每个字符串中返回不同的字符。如果在LINQ中无法做到这一点,那么我愿意接受替代方案。 谢谢!

更新: 哇,很棒的答案,这么快!什么方法可以按字母顺序排列字符或按频率出现?

5 个答案:

答案 0 :(得分:5)

你可以这样做:

string[] values = new []{"AABbDDCCRRFF","JOJaCK","BILLY"};

var uniqueChars = new string(values.SelectMany(x => x).Distinct().ToArray());

编辑:

根据@Douglas的建议,使用string.Concat()代替new string()可能会稍微提高效率,即:

var uniqueChars = string.Concat(values.SelectMany(x => x).Distinct());

答案 1 :(得分:1)

试试这个;

var valuesList = new List<string> {"AABbDDCCRRFF", "JOJaCK", "BILLY"};

var distChars = string.Join("", (from str in valuesList  // Select all strings.
                                 from ch in str          // Select all chars.
                                 select ch).Distinct()); // Get distinct chars.

答案 2 :(得分:1)

在您的代码中,您首先从每行中选择中的不同字符,然后选择字符的不同序列,最后调用ToStringIEnumerable<T>

我建议您首先从所有行中选择所有字符,对组合序列应用Distinct过滤器,最后调用string.Concat以连接结果序列人物:

var distChars = string.Concat(
    (
        from row in valuesList[c]
        from c in row
        select c
    ).Distinct());

答案 3 :(得分:1)

你希望不同的字符不是字符串。

var strings = new string[] { "AABbDDCCRRFF", "JOJaCK", "BILLY" };
var q = (from str in strings
         from c in str
         select c).Distinct().ToList();

答案 4 :(得分:0)

这里的问题是你有一个集合的集合。尝试在选择不同的字符之前加入字符串。