2017-10-06 31 views
-4

在C#中如何创建一个给定字符串的函数,返回第一个不同的字符?在给定的字符串中查找第一个不同的字符

实例在:abcdabc 范例OUT:d

我可以使用.Distinct()实现这一目标?

+1

样品的输入和输出? – Amit

+2

你是什么意思的“不重复”?如下所示,下一个字符是否相同或字符串中是否有其他出现? – DiskJunky

+2

你有什么尝试?期望的输出是什么 - char或char索引?提供一些样本并描述你有的问题 –

回答

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

或使用LINQ与扩展方法 (称为方法的语法)lambda表达式,

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

我喜欢这种方法Amit – 78lro

+1

第二个被称为方法语法。尽管从技术上讲,无论如何你都有第一种方法和查询语法的混合。 – juharr

+0

@juharr我的意思是lambda表达式 – Amit

-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; 
     } 
    } 
} 
+3

为什么在比较'char'的时候调用'ToString()'? – DiskJunky

+0

因为'ch'是一个'string' – jmunoa7

+3

@ jmunoa7但它不一定是,你可以留下它的字符。这样你在这里多次调用'.ToString()':'str [i] .ToString()'和这里'str [j] .ToString()'它们都是字符,但是你做了两个字符串... – EpicKip

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(); 
相关问题