我正试图在列表中的所有字符串中获得一个独特的字符列表(区分大小写)。
我有一个包含3个字符串的列表:
"AABbDDCCRRFF"
"JOJaCK"
"BILLY"
输出应该是(字符的顺序并不重要):
ABDCRFJOKaILYb
我知道下面的内容有问题,但无法解决:
distChars = (from string row in valuesList[c]
select row.Distinct()
).Distinct().ToString();
有没有人知道如何从每个字符串中返回不同的字符。如果在LINQ中无法做到这一点,那么我愿意接受替代方案。 谢谢!
更新: 哇,很棒的答案,这么快!什么方法可以按字母顺序排列字符或按频率出现?
答案 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)
在您的代码中,您首先从每行中选择中的不同字符,然后选择字符的不同序列,最后调用ToString
在IEnumerable<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)
这里的问题是你有一个集合的集合。尝试在选择不同的字符之前加入字符串。