我需要编写一个函数来返回文本中出现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例如。我做错了什么?拜托,我非常需要你的帮助。感谢名单。
答案 0 :(得分:4)
如果你有C#3.0或更新版本,你可以使用LINQ:
char[] result = text
.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.ToArray();
答案 1 :(得分:2)
Linq可以简化。这符合要求吗?
"aabbccpoiu".ToCharArray()
.GroupBy(c => c)
.Where(g => g.Count() > 1)
.Select(g => g.Key)
返回a,b和c。
答案 2 :(得分:1)
改为返回一个List,并像在listview中一样在函数内部使用它;只需使用List<char> rVal = new List<char>();
,然后使用rVal.Add(character)
(如果尚未添加
同时删除循环内的返回:
答案 3 :(得分:1)
只是一个建议=
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;
}
答案 4 :(得分:0)
第一个return result;
会在找到第一个结果时直接返回。