2017-10-06 34 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(); 
相關問題