首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对二维数组列表进行排序

对二维数组列表进行排序
EN

Stack Overflow用户
提问于 2018-09-10 15:07:46
回答 2查看 97关注 0票数 1

我试图对包含bool2D数组的列表进行排序,如下所示。

代码语言:javascript
复制
List<bool[,]>boolList;

bool[,] bool2DArray = {
    {true,true,true,true},
    {true,true,true,true},
    {true,true,true,true}
};

我一直在尝试根据每个2D数组中的真实计数的数量来排序它们的列表。

经过一些研究和查看Stack溢出之后,我一直未能找到解决这个具体问题的方法;在这种情况下,我所能找到的许多解决方案对我来说是行不通的,在这种情况下,我不是直接比较它们,而是对它们进行计算,结果导致我尝试了Lambada类型的解决方案,这个解决方案也失败了,但我认为这可能是因为我不知道如何正确地实现它。

编辑

我为计数而做的一个简单的函数

代码语言:javascript
复制
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类型的解决方案,我认为是在正确的方向,但无效。

代码语言:javascript
复制
List<bool[,]> sortedList = boolList.Sort((a,b) => (GetCount(a).CompareTo(GetCount(b))));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-10 15:16:15

首先,您需要了解如何轻松地处理2d数组,并计算其中的true数量。要对单个项目执行此操作,您可以执行类似于以下问题的操作:Fast way to convert a two dimensional array to a List ( one dimensional )

代码语言:javascript
复制
bool2DArray.Cast<bool>().Count(i => i)

然后用OrderDescendingBy包装它,得到所需的结果:

代码语言:javascript
复制
var collection = new List<bool[,]> { bool2DArray, ... };
var result = collection.OrderByDescending(item => item.Cast<bool>().Count(i => i));
票数 2
EN

Stack Overflow用户

发布于 2018-09-10 15:28:23

我更喜欢这种方法,我认为这种方法更易读,而且涵盖了更多的用法:

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52260726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档