我有一个构建版本列表
List<int[]> BuildVersions;
如何找到最新版本。
构建
等版本100.1.2.3
101.12.3.2
101.12.3.3
更新:表达式必须检查第一个数字,然后是第二个,然后是第三个,然后是最后一个
答案 0 :(得分:5)
int[] maxVersion = buildVersions.OrderByDescending(v => v[0])
.ThenByDescending(v => v[1])
.ThenByDescending(v => v[2])
.FirstOrDefault();
或更通用的解决方案如
T[] HierarchicalMax<T>(IEnumerable<T[]> items)
{
var length = items.Min(v => v.Length);
IEnumerable<T[]> result = items;
for (int i = 0; i < length; i++)
{
int offset = i;
result = result.OrderByDescending(v => v[offset]);
}
T[] max = result.FirstOrDefault();
return max;
}
答案 1 :(得分:0)
如果我理解正确,你有一个int数组列表,你想确定那里的最高int。
这将是这样的:
var max = BuildVersions.Max(x => x.Max(y => y));
答案 2 :(得分:0)
效率稍低,因为它每次都会找到当前过滤版本集的最小长度。这个时间可以交换空间,但需要额外的代价来复杂代码。假设1.1大于1.1.1。
for (int versionPart = 0; versionPart < versions.Min(v => v.Length); versionPart += 1) {
versions = versions.MaxValues(version => version[versionPart]);
}
var maxVersion = versions.FirstOrDefault();
使用扩展方法:
public static IEnumerable<T> MaxItems<T>(this IEnumerable<T> list, Func<T, int> selector) {
var enumerator = list.GetEnumerator();
if (!enumerator.MoveNext()) {
return Enumerable.Empty<T>();
}
var maxItem = enumerator.Current;
List<T> maxItems = new List<T>() { maxItem };
int maxValue = selector(maxItem);
while (enumerator.MoveNext()) {
var item = enumerator.Current;
var value = selector(item);
if (value > maxValue) {
maxValue = value;
maxItems = new List<T>() { item };
} else if (value == maxValue) {
maxItems.Add(item);
}
}
return maxItems;
}
答案 3 :(得分:-1)
你有一个int数组列表吗?
如果没有,
int maxValue=BuildVersions.Max();