我正在尝试对包含bool 2D数组的列表进行排序,如下所示。
List<bool[,]>boolList;
bool[,] bool2DArray = {
{true,true,true,true},
{true,true,true,true},
{true,true,true,true}
};
我一直在尝试按每个2D数组中的真实计数对它们所在的列表进行排序。
经过几个小时的搜索和整个Stackoverflow的查找,我仍然无法找到针对该特定问题的解决方案,在这种情况下,我无法找到的许多解决方案对我都行不通直接比较它们,而是对它们进行计算的结果使我尝试使用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))));
答案 0 :(得分:2)
您首先想了解如何轻松使用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));
答案 1 :(得分:0)
我更喜欢这种方法,我认为这种方法更具可读性并且涵盖了更多用例:
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();
}
}