在C#中,如何创建一个给定字符串的函数,返回第一个不同的字符?
示例在:abcdabc 示例输出:d
我可以使用.Distinct()
来实现这一目标吗?
答案 0 :(得分:2)
你也可以使用LINQ。例如,此LINQ查询将返回e。
var str = "abcdeabcd";
var item = (from a in str group a by a
into grouped select new { character = grouped.Key, Count = grouped.Count()
}).Where(t=>t.Count == 1)
.FirstOrDefault()?.character;
Console.WriteLine(item);
或使用带有扩展方法的lambda表达式的LINQ (称为方法语法),
var find = str.GroupBy(t => t)
.Select(y => new { character = y.Key, Count = y.Count() })
.Where(a => a.Count < 2).FirstOrDefault()?.character;
Console.WriteLine(find);
Console.ReadLine();
答案 1 :(得分:0)
var input = "abcdabc";
var firstDistinct = input.Select((ch, index) => new {ch, index})
.GroupBy(z => z.ch)
.Where(z => z.Count() == 1)
.OrderBy(z => z.Index())
.Select(z => z.Key)
.FirstOrDefault();
上方找到一次显示的字符(Count() == 1
)并首先显示(OrderBy(z => z.Index())
)。
技术您不需要OrderBy
,因为内存LINQ提供商的GroupBy
运营商会按顺序保留结果默认情况下。但这是一个实施细节,而不是合同义务。如果您乐意利用这个实施细节(正如所有其他答案一样),那么请考虑:
var firstDistinct = input.GroupBy(z => z)
.Where(z => z.Count() == 1)
.Select(z => z.Key)
.FirstOrDefault();
答案 2 :(得分:-1)
尝试这样做:
var str="abcdabcd";
for (int i = 0; i < str.Length; i++)
{
String ch = str[i].ToString();
for (int j = 0; j < str.Length; j++)
{
if (ch == str[j].ToString())
{
break;
}
else
{
Response.Write("First Non repeating character : " + ch.ToString());
return;
}
}
}