C# 列表的列表(二维矩阵)

发布于 2024-12-09 06:39:49 字数 521 浏览 1 评论 0原文

我尝试使用列表列表实现二维数组类。有人可以帮我实现一个类似于下面的 T this[int x, int y] 函数的 get 函数,以获取 [int x,:] 给出的列中的所有元素,其中 x 是列。作为数组返回就可以了。

public class Matrix<T>
{
    List<List<T>> matrix;

    public Matrix()
    {
        matrix = new List<List<T>>();
    }

    public void Add(IEnumerable<T> row)
    {
        List<T> newRow = new List<T>(row);
        matrix.Add(newRow);
    }

    public T this[int x, int y]
    {
        get { return matrix[y][x]; }
    }
}

Im trying to implement a 2D array class using List of Lists. Can someone please help me to implement a get function similar to T this[int x, int y] function below to get all the elements in a column given by [int x,:] where x is the column. Returning as an array would be fine.

public class Matrix<T>
{
    List<List<T>> matrix;

    public Matrix()
    {
        matrix = new List<List<T>>();
    }

    public void Add(IEnumerable<T> row)
    {
        List<T> newRow = new List<T>(row);
        matrix.Add(newRow);
    }

    public T this[int x, int y]
    {
        get { return matrix[y][x]; }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

誰ツ都不明白 2024-12-16 06:39:49

由于您想要返回的每个值都位于单独的行中,因此位于单独的 List 中,因此您必须迭代所有行列表并返回其中的元素 x行。

返回值的数量将始终等于行数,因此您可以:

T[] columnValues = new T[matrix.Count];
for (int i = 0; i < matrix.Count; i++)
{
    columnValues[i] = matrix[i][x];
}
return columnValues;

Since each value you want to return is in a separate row, and so in a separate List, you'll have to iterate through all row lists and return element x of those rows.

The number of values returned will always equal the number of rows, so you could:

T[] columnValues = new T[matrix.Count];
for (int i = 0; i < matrix.Count; i++)
{
    columnValues[i] = matrix[i][x];
}
return columnValues;
夏日浅笑〃 2024-12-16 06:39:49

或者:
返回矩阵.Select(z=>z.ElementAtOrDefault(x));

Or:
return matrix.Select(z=>z.ElementAtOrDefault(x));

柠北森屋 2024-12-16 06:39:49
public IEnumerable<T> this[int x]
{
    get 
    {
          for(int y=0; y<matrix.Count; y++)
                yield return matrix[y][x];            
    }
}

与实例化结果数组相比,yielding 有一些好处,因为它可以更好地控制输出的使用方式。例如 myMatrix[1].ToArray() 会给你一个 double[] 而 myMatrix[1].Take(5).ToArray() 只会实例化一个 double[5]

public IEnumerable<T> this[int x]
{
    get 
    {
          for(int y=0; y<matrix.Count; y++)
                yield return matrix[y][x];            
    }
}

Yielding has some benefits over instantiating a result array as it gives better control over how the output is used. E.g. myMatrix[1].ToArray() will give you a double[] whereas myMatrix[1].Take(5).ToArray() will only instantiate a double[5]

浅浅 2024-12-16 06:39:49

你必须确保每个矩阵列表至少有 x 个元素

    public T[] this[int x]
    {
        get
        {
            T[] result = new T[matrix.Count];
            for (int y = 0; y < matrix.Count; y++)
            {
                result[y] = matrix[y][x];
            }
            return result;
        }
    }

you have to make sure that every lists of matrix have at least x elements

    public T[] this[int x]
    {
        get
        {
            T[] result = new T[matrix.Count];
            for (int y = 0; y < matrix.Count; y++)
            {
                result[y] = matrix[y][x];
            }
            return result;
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文