C #. Как вернуть полукокса? - PullRequest
0 голосов
/ 13 марта 2011

Мне нужно написать функцию, которая возвращает все символы, которые встречаются в тексте 2 или более раз.Там нет никаких проблем, когда я использую его без функции (например, при нажатии кнопки).Вот как я это делаю:

for (int i = 0; i < alph.Length; i++) // alph is my text(string)
        {
            int count = allText.Split(alphCh[i]).Length - 1; 
            if (count >= 2)                   
                listView2.Items.Add(alphCh[i].ToString());                
        }

Вот как я пишу функцию:

public char[] chars2(string text)
    {
        char[] allChar = text.ToCharArray();
        string allText = text.ToString();
        string allTextL = text.ToLower();
        string alph = "abcdefghijklmnopqrstuvwxyz";
        char[] alphCh = alph.ToCharArray();  
        char[] result = new char[0];
        int allcount = 0;

        for (int i = 0; i < alph.Length; i++)
        {
            int count = allText.Split(alphCh[i]).Length - 1;
            if (count >= 2)
            {
                allcount++;
                result = new char[allcount];
                for (int j = 0; j < allcount; j++)
                {
                    result[j] = alphCh[i];
                    return result;
                }
            }               
        }  
        return result;            
    }

Но функция возвращает только первый символ, который встречается в тексте 2 или более раз.Например, я пишу abcbca - func возвращает a, и я хочу, чтобы func возвращает a, b, c, чтобы записать его, например, в ListView.Что я делаю не так?Пожалуйста, мне так нужна твоя помощь.Thanx.

Ответы [ 5 ]

4 голосов
/ 13 марта 2011

Если у вас C # 3.0 или новее, вы можете использовать LINQ:

char[] result = text
    .GroupBy(x => x)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)
    .ToArray();
2 голосов
/ 13 марта 2011

Linq может упростить.Соответствует ли это требованиям?

"aabbccpoiu".ToCharArray()
    .GroupBy(c => c)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)

Возвращает a, b и c.

1 голос
/ 13 марта 2011

Просто предложение =

public List<char> getMoreThanTwice(string text) {

char[] characters = text.toCharArray();
Dictionary<char, int> chars = new Dictionary<char, int>();
List<char> morethantwice = new List<char>();

for (int i=0;i<characters.Length;i++) {
  if (chars.containsKey(characters[i])) {
   chars[characters[i]] = chars[characters[i]] + 1;
  }else{
   chars.Add(characters[i], 1);
   }
}

foreach (KeyValuePair keypair in chars) {
   if (keypair.Value >= 2)  {
     morethantwice.Add(keypair.Key);
   }
 }

return morethantwice;
}
1 голос
/ 13 марта 2011

Вместо этого верните список и используйте его внутри функции так же, как и со списком;просто используйте List<char> rVal = new List<char>(); и затем rVal.Add(character), если он еще не добавлен

Также удалите возврат внутри цикла:

0 голосов
/ 13 марта 2011

Первый return result; вернется напрямую, когда найдет первый результат.

...