LAMBDA或LINQ中的分层Max

Sal*_*leh 0 c# linq lambda

我有一个构建版本列表

List<int[]> BuildVersions;
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到最后的构建版本.

构建诸如的版本

100.1.2.3
101.12.3.2
101.12.3.3
Run Code Online (Sandbox Code Playgroud)

更新:表达式必须先检查第一个数字,然后检查第二个数字,然后检查第三个数字,然后检

Muh*_*han 5

int[] maxVersion = buildVersions.OrderByDescending(v => v[0])
                                .ThenByDescending(v => v[1])
                                .ThenByDescending(v => v[2])
                                .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

或者更通用的解决方案如下

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;
        }
Run Code Online (Sandbox Code Playgroud)