2 回答
TA贡献1852条经验 获得超1个赞
您已经快到了-比较结果为0(即值与上一个相同)时,您将执行“严格递增,不重复”和“递增,允许重复”之间的唯一区别。
如果比较的结果不是,您只需要更改IsSortedAscending返回的方法即可:false>= 0> 0
public static bool IsSortedAscending(string[] arr)
{
for (int i = arr.Length - 2; i >= 0; i--)
{
// Fail if this ID is equal to or bigger than the next one.
if (arr[i].CompareTo(arr[i + 1]) >= 0)
{
return false;
}
}
return true;
}
(您也可以使用Skip和Zip作为另一种成对比较元素的方式,但这是稍有不同的事情。)
请注意,如果您的数字长度不同,当前您的代码可能会失败。例如,考虑ID“ bk99”和“ bk100”。它将比较“ 99”和“ 100”作为字符串,并确定“ 99”在“ 100”之后。
如果您的ID始终是真的“ bk”,后跟一个整数,我会尽早解析它们:
var ids = myfile.Descendants("book")
.Select(a => a.Attribute("id").Value.Substring(2))
.Select(id => int.Parse(id))
.ToArray();
然后,您将更改方法以接受int[]而不是string[]。
到那时,检查“缺失” ID也更容易-字符串形式,没有“缺失” ID的真实概念,因为您可能会有“ bk101”,“ bk101a”,“ bk101c”-是“ bk101b” ”在那里不见了吗?如果是这样,那么“ bk101aa”呢?使用整数,它要简单得多。
获得整数ID数组后,就可以使用数组的长度来检查是否缺少任何值:
if (ids.Length > 0 ids.Length - 1 != ids.Last() - ids.First())
{
Console.WriteLine("At least one ID is missing");
}
诚然,那不会告诉您缺少哪个ID。
- 2 回答
- 0 关注
- 136 浏览
添加回答
举报