多个字符串中的不同字符

本文关键字:字符 字符串 | 更新日期: 2023-09-27 18:25:01

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

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

"AABbDDCCRRFF"
"JOJaCK"
"BILLY"

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

ABDCRFJOKaILYb

我知道以下是错误的,但无法解决:

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

有人知道如何从每个字符串中返回不同的字符吗。如果这不能在LINQ中完成,那么我对其他选择持开放态度。谢谢

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

多个字符串中的不同字符

您可以这样做:

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

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

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

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

试试这个;

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.

您想要的是不同的字符而不是字符串。

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

这里的问题是您有一个集合集合。请先尝试连接字符串,然后再选择不同的字符。