gpt4 book ai didi

C# 使用 LINQ 对字符数组列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:56 24 4
gpt4 key购买 nike

我正在尝试对以下列表进行排序 List<char[]> permutations = new List<char[]>();

它包含数字 0、1、2、3、4、5、6、7、8、9 的所有排列,但是它们没有排序,但我需要它们排序。这就是我为解决问题所做的工作:

        permutations = permutations.OrderBy(arr1 => arr1[9]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[8]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[7]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[6]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[5]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[4]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[3]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[2]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[1]).ToList();
permutations = permutations.OrderBy(arr1 => arr1[0]).ToList();

我怎样才能避免这种情况或如何将其写在 1 行中?

最佳答案

首先,我会注意到您对列表进行了 9 次重新排序。

链式排序的正确方法是使用 ThenBy (请注意,比较的顺序是颠倒的,以便按照与现在相同的方式对结果进行排序):

    permutations = permutations.OrderBy(arr1 => arr1[0])
.ThenBy(arr1 => arr1[1])
.ThenBy(arr1 => arr1[2])
.ThenBy(arr1 => arr1[3])
.ThenBy(arr1 => arr1[4])
.ThenBy(arr1 => arr1[5])
.ThenBy(arr1 => arr1[6])
.ThenBy(arr1 => arr1[7])
.ThenBy(arr1 => arr1[8])
.ThenBy(arr1 => arr1[9]).ToList();

减少代码量的一种简单方法是

permutations = permutations.OrderBy(a => new string(a)).ToList();

或者就地排序列表。

permutations.Sort((a1, a2) => (new string(a)).CompareTo(new string(a2)));

虽然这些会生成很多字符串,但下一个最佳选择是编写 IComparer<char[]>以您希望的方式比较两个字符数组。另一种选择(因为我知道字符数组列表来自不同的问题)将排列存储为 strings 而不是 arrays。那么排序就很简单了:

permutations.Sort();

关于C# 使用 LINQ 对字符数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36463152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com