我试图对包含bool2D数组的列表进行排序,如下所示。
List<bool[,]>boolList;
bool[,] bool2DArray = {
{true,true,true,true},
{true,true,true,true},
{true,true,true,true}
};我一直在尝试根据每个2D数组中的真实计数的数量来排序它们的列表。
经过一些研究和查看Stack溢出之后,我一直未能找到解决这个具体问题的方法;在这种情况下,我所能找到的许多解决方案对我来说是行不通的,在这种情况下,我不是直接比较它们,而是对它们进行计算,结果导致我尝试了Lambada类型的解决方案,这个解决方案也失败了,但我认为这可能是因为我不知道如何正确地实现它。
编辑
我为计数而做的一个简单的函数
int GetCount(bool[,]bool2DArray) {
int count = 0;
int rows = bool2DArray.GetUpperBound(0);
int columns = bool2DArray.GetUpperBound(1);
for (int x = 0; x <= rows; x++) {
for (int i = 0; i <= columns; i++) {
bool isTrue = bool2DArray[x, i];
if (isTrue) {
count++;
}
}
}
return count;
}这是Lambada类型的解决方案,我认为是在正确的方向,但无效。
List<bool[,]> sortedList = boolList.Sort((a,b) => (GetCount(a).CompareTo(GetCount(b))));发布于 2018-09-10 15:16:15
首先,您需要了解如何轻松地处理2d数组,并计算其中的true数量。要对单个项目执行此操作,您可以执行类似于以下问题的操作:Fast way to convert a two dimensional array to a List ( one dimensional )
bool2DArray.Cast<bool>().Count(i => i)然后用OrderDescendingBy包装它,得到所需的结果:
var collection = new List<bool[,]> { bool2DArray, ... };
var result = collection.OrderByDescending(item => item.Cast<bool>().Count(i => i));发布于 2018-09-10 15:28:23
我更喜欢这种方法,我认为这种方法更易读,而且涵盖了更多的用法:
class Program
{
static void Main(string[] args)
{
List<bool[,]> boolList = new List<bool[,]>() {
new bool[,] {
{true,true,true,true},
{true,true,true,true},
{true,true,true,true}
},
new bool[,] {
{false,true,true,true},
{false,true,true,true},
{false,true,true,true}
}
};
boolList = OrderBoolArraysByBoolean(boolList, true);
}
private static List<bool[,]> OrderBoolArraysByBoolean(List<bool[,]> listOfArrays, bool value)
{
return listOfArrays.OrderByDescending(x => x.Cast<bool>().Count(i => i == value)).ToList();
}
}https://stackoverflow.com/questions/52260726
复制相似问题