c# - 将二维数组上的两个循环转换为 Linq 语法

标签 c# arrays linq

我有一个二维数组,其中包含 MyObj 类型的对象。

private MyObj[,] myObjs = new MyObj[maxX, maxY];

我想在传入匹配对象时从数组中获取索引。我想从此数组中获取 x 和 y 值。我可以将这两个值作为采用 x 和 y 坐标的 Position 对象返回。

private Position GetIndices(MyObj obj)
{
    for (int x = 0; x < myObjs.GetLength(0); x++)
    {
        for (int y = 0; y < myObjs.GetLength(1); y++)
        {
            if (myObjs[x, y] == obj)
            {
                return new Position(x, y);
            }
        }
    }
}

是否可以将此代码缩短为某些 Linq 代码行?

最佳答案

但我不认为,它看起来不错:)

        var result = Enumerable.Range(0, myObjs.GetLength(0))
            .Select(x => Enumerable.Range(0, myObjs.GetLength(1)).Select(y => new { x, y }))
            .SelectMany(o => o)
            .FirstOrDefault(o => myObjs[o.x, o.y] == obj);

关于c# - 将二维数组上的两个循环转换为 Linq 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887566/

相关文章:

c# - .NET DICOM库

python - 多维 Numpy 数组排序

Android:有没有办法以编程方式获取已定义字符串数组的名称值?

c# - LINQ Group by Query 中的组号

c# - 我可以使用 LINQ 将两个数组的值相加吗?

C# WPF 应用程序在由使用 topshelf 创建的 Windows 服务启动时不显示表单

c# - C# 中文本文件解析的最佳方法?

C# - 获取 ToolStripMenuItem 的父项

java - 数组创建堆栈溢出

c# - 选择前 10 条记录,然后选择下 10 条记录,使用 Linq 进行分页