char数组存储空值
本文关键字:空值 存储 数组 char | 更新日期: 2023-09-27 17:57:36
我目前正在进行一些代码挑战,遇到了一个找不到解决方案的问题。
public static bool SelfDescribing(string num)
{
char[] digit = num.ToArray();
int bound = digit.Count();
for (int i = 0; digit.Length != 0 && i < bound; i++)
{
int arrLength = 0;
var count = num.Count(x => x == digit[i]);
if (count == i)
{
arrLength++;
if (arrLength == bound)
{
return true;
}
}
}
return false;
}
每次我试图将一个字符串传递给它时,它都会在我的数字数组中将单独的值存储为null。例如,我试图传递值test1="1211"
您的方法错误有多种原因:
1-您正在比较计数和索引,您应该将计数与该索引中的值进行比较。
if (count == i)
应为if (count == char.GetNumericValue(digit[i]))
2-你应该计算索引,而不是存储在该索引中的字符:
3-最重要的是:当发现不匹配时,应返回false。您不需要比较计数成功匹配数字。
num.Count(x => x == digit[i]);
应为num.Count(x => x == char.Parse(i.ToString()));
你可以这样修复你的方法:
(这不是首选逻辑,请检查下面的备选方案)
public static bool SelfDescribing(string num)
{
char[] digit = num.ToArray();
int bound = digit.Count();
int sucessCount = 0;
for (int i = 0; digit.Length != 0 && i < bound; i++)
{
var count = num.Count(x => x == char.Parse(i.ToString()));
if (count == char.GetNumericValue(digit[i]))
{
sucessCount++;
}
}
return sucessCount == digit.Length;
}
优化您的方法:
public static bool SelfDescribing(string num)
{
for (int i = 0; i < num.Length; i++)
{
var count = num.Count(x => x == char.Parse(i.ToString()));
if (count != char.GetNumericValue(num[i]))
return false;
}
return true;
}
备选工作逻辑:
public static bool SelfDescribing(string num)
{
bool result = true;
int[] numbersArray = num.ToArray().Select(x => (int)char.GetNumericValue(x)).ToArray();
var occurences = numbersArray.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
for (int i = 0; i < numbersArray.Length; i++)
{
int occ;
if (occurences.TryGetValue(i, out occ))
{
if(occ != numbersArray[i])
{
result = false;
break;
}
}
else
{
if (i == 0)
continue;
}
}
return result;
}
这会给您带来预期的结果吗?您还没有解释您要做什么,但arrLength似乎只应该初始化一次。
public static bool SelfDescribing(string num)
{
char[] digit = num.ToArray();
int bound = digit.Count();
int arrLength = 0;
for (int i = 0; digit.Length != 0 && i < bound; i++)
{
var count = num.Count(x => x == digit[i]);
if (count == i)
{
arrLength++;
if (arrLength == bound)
{
return true;
}
}
}
return false;
}