C Sharp Anagram Kelimeleri ,Anagram Sözcükleri Eşleştirip Gruplama

Anagram, bir sözcüğün veya sözcük grubunun harflerinin yer değiştirerek başka bir sözcüğü veya sözcük grubunu oluşturmasıdır.Bazı örnekler ; (çakı,açık,) ,(yar ,ray) ,(form,from),(listen,silent) gibi.

Öncelikle anagram kelimeleri karşılaştıran IEqualityComparer arayüzünden implement edilen AnagramEqualityComparer clasımızı yazalım.

 public class AnagramEqualityComparer : IEqualityComparer<string>
    {
        public bool Equals(string x, string y)
        {
            return getCanonicalString(x) == getCanonicalString(y);
        }
 
        public int GetHashCode(string obj)
        {
            return getCanonicalString(obj).GetHashCode();
        }
 
        private string getCanonicalString(string word)
        {
            char[] wordChars = word.ToCharArray();
            Array.Sort<char>(wordChars);
            return new string(wordChars);
        }
    }

Şimdi Linq yardımıyla ve GroupBy deyimini kullanarak , anagram kelimeleri bularak , kendi içlerinde gruplayalım.Ve Ling GroupBy deyimi içerisinde kelimelerin boşluklarını silelim ve büyük harfe çevirelim.Sonrada ekrana yazdıralım.

    class Program
    {
        static void Main(string[] args)
        {
            string[] anagrams = { "pide   ", " tay", " edip ", " dipe ", " yat  " ,"ankara","akbaba","nakara" ,"babaak","bakaba"};
 
            var orderGroups = anagrams.GroupBy(
                w => w.Trim(),
                a => a.ToUpper(),
                new AnagramEqualityComparer()
            );
 
            foreach (var item in orderGroups)
            {
                foreach (var groups in item.ToList())
                {
                    Console.WriteLine(groups.Trim());
                }
                Console.WriteLine("----------------");
            }
 
            Console.ReadLine();
        }  
    }

Ekran çıktısı aşağıdaki gibi olacaktır.

C sharp Anagram Kelimeler Bulma Ve Gruplama

Bir Cevap Yazın