如何查找 2D 数组中元素的位置

本文关键字:数组 元素 位置 2D 何查找 查找 | 更新日期: 2023-09-27 18:33:53

在下面的代码中,我试图打印出0以下数字的位置。我可以很好地打印数字本身,但不知道如何打印出位置。

编译得很好,但是当我运行它时,它会打印出第一个数字,然后崩溃。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Tutorial_3
{
    class Q8FourByFiveArray
    {
        static void Main(string[] args)
        {
            int[,] numbers = new int[4, 5] { {1, -2, 6, -9, 8}, {-3, 4, -3, 6, 7}, {5, 6, -9, 0, -2}, {4, 5, -1, -7, 1}};
            //search the array for numbers less than 0. Then print their positions
            for (int r = 0; r < 4; r++)
            {
                for (int c = 0; c < 5; c++)
                {
                    if (numbers[r, c] < 0)
                    {
                        Console.WriteLine(numbers.GetValue(r, c));
                        Console.WriteLine("Row: " + Array.IndexOf(numbers, r, c));
                        Console.WriteLine("Column: " + Array.IndexOf(numbers, c));
                    }
                }
                Console.WriteLine(" ");
            }
        }
    }
}

如何查找 2D 数组中元素的位置

你不需要Array.IndexOf,你已经有行和列通过你的嵌套循环。使用它们。

int[,] numbers = new int[4, 5] { { 1, -2, 6, -9, 8 }, { -3, 4, -3, 6, 7 }, { 5, 6, -9, 0, -2 }, { 4, 5, -1, -7, 1 } };
//search the array for numbers less than 0. Then print their positions
for (int r = 0; r < 4; r++)
{
    for (int c = 0; c < 5; c++)
    {
        if (numbers[r, c] < 0)
        {
            Console.Write(numbers.GetValue(r, c)); // better to use numbers[r,c]
            Console.Write(" Row: " + r);
            Console.WriteLine(" Column: " +c);
        }
    }
    Console.WriteLine(" ");
}

或者只有一行输出:

Console.WriteLine("Number: {0}, Row: {1}, Column: {2}", numbers.GetValue(r, c), r, c);

更改以下内容:

Console.WriteLine("Row: " + Array.IndexOf(numbers, r, c));
Console.WriteLine("Column: " + Array.IndexOf(numbers, c));

对此:

Console.WriteLine("Row: " + r.ToString());
Console.WriteLine("Column: " + c.ToString());

所以我可能对问题是什么有点困惑,但据我所知,你只想打印rc的值。相反,您正在IndexOf东西来做这件事,这些东西实际上应该采用您正在搜索的值,返回它的索引,因此使用通常是不正确的。

基本上改变这一点;

                if (numbers[r, c] < 0)
                {
                    Console.WriteLine(numbers.GetValue(r, c));
                    Console.WriteLine("Row: " + Array.IndexOf(numbers, r, c));
                    Console.WriteLine("Column: " + Array.IndexOf(numbers, c));
                }

对此;

                if (numbers[r, c] < 0)
                {
                    Console.WriteLine(numbers.GetValue(r, c));
                    Console.WriteLine("Row: " + r.ToString());
                    Console.WriteLine("Column: " + c.ToString());
                }

Array.IndexOf可以与一维数组一起使用。在此代码中,无需使用它。只需使用 rc 作为元素的位置。

Array.IndexOf()实际上并没有做你认为它做的事情。它扫描第一个参数以查找与第二个参数匹配的第一个值,从第三个参数开始。