У меня есть код как
string code = "AABBDDCCRRFF";
В этом коде я хочу получить только отдельные символы
Вывод должен быть таким:
ANS: ABDCRF
У меня есть код как
string code = "AABBDDCCRRFF";
В этом коде я хочу получить только отдельные символы
Вывод должен быть таким:
ANS: ABDCRF
string code = "AABBDDCCRRFF";
string answer = new String(code.Distinct().ToArray());
Linq Distinct возвращает отдельные элементы из последовательности. Поскольку класс String
реализует IEnumerable<char>
, Distinct
в этом контексте возвращает IEnumerable<char>
, содержащий все уникальные символы в строке.
code.Distinct();
Альтернативный вариант с использованием кода, совместимого с dotNet 2.0:
public string RemoveDuplicateChars(string input)
{
var stringBuilder = new StringBuilder(input);
foreach (char c in input)
{
stringBuilder.Replace(c.ToString(), string.Empty)
.Append(c.ToString());
}
return stringBuilder.ToString();
}
Здесь применяется подход, который предоставляет строку и количество отдельных символов...
using System;
using System.Collections.Generic;
namespace StringDict
{
class Program
{
static IDictionary<char, int> charDict =new Dictionary<char, int>();
static private string _charStr = "s;ldfjgsl;dkkjfg;lsdkfjg;lsdkfjg;lsdkfjg;lsdkfj";
private static int _outInt=0;
static void Main(string[] args)
{
foreach (var ch in _charStr)
{
if (!charDict.TryGetValue(ch,out _outInt))
{
charDict.Add(new KeyValuePair<char, int>(ch,1));
}
else
{
charDict[ch]++;
}
}
Console.Write("Unique Characters: ");
Console.WriteLine('\n');
foreach (var kvp in charDict)
{
Console.Write(kvp.Key);
}
Console.WriteLine('\n');
foreach (var kvp in charDict)
{
Console.WriteLine("Char: "+kvp.Key+" Count: "+kvp.Value);
}
Console.ReadLine();
}
}
}
Вывод...
Unique Characters:
s;ldfjgk
Char: s Count: 6
Char: ; Count: 6
Char: l Count: 6
Char: d Count: 6
Char: f Count: 6
Char: j Count: 6
Char: g Count: 5
Char: k Count: 6
Как насчет в linq:
var str = "AABBCCDDDDDDEEEEEFFF";
var unique = str.ToCharArray().Distinct();
Console.WriteLine("Answer: {0}.", string.Join(string.Empty, unique));
Вы можете сделать это следующим образом
var s = "AABBDDCCRRFF";
var result = s.Distinct();
var distinct = result.Aggregate(string.Empty, (current, c) => current + c.ToString());
Console.WriteLine(distinct);
Здесь подход с группировкой по символам...
var code="AABBDDCCRRFF";
var unique = string.Concat(text.GroupBy(a => a).Select(a => a.Key));
Просто черт возьми - используя StringBuilder
string code = "AABBDDCCRRFF";
StringBuilder sb = new StringBuilder();
code.Distinct().ToList().ForEach(c => sb.Append(c));
MessageBox.Show(sb.ToString());