Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在矩阵中查找第一个和最后一个真值_C#_Arrays_Matrix - Fatal编程技术网

C# 在矩阵中查找第一个和最后一个真值

C# 在矩阵中查找第一个和最后一个真值,c#,arrays,matrix,C#,Arrays,Matrix,我有一个包含布尔值的二维数组。我需要我的脚本来找到数组第一行的第一个和最后一个“true”值,并对第二行执行相同的操作(矩阵将始终有两行)。 下面是我可以使用的矩阵示例,黄色的值是我必须对其执行指令的值: 如果以前有人问过这个问题,我很抱歉,但我找不到任何有用的东西。对于2D数组,您可以尝试嵌套循环;您可能需要第一个和最后一个1s的索引: int[,] data = new int[,] { { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, { 0, 1,

我有一个包含布尔值的二维数组。我需要我的脚本来找到数组第一行的第一个和最后一个“true”值,并对第二行执行相同的操作(矩阵将始终有两行)。 下面是我可以使用的矩阵示例,黄色的值是我必须对其执行指令的值:


如果以前有人问过这个问题,我很抱歉,但我找不到任何有用的东西。

对于2D数组,您可以尝试嵌套循环;您可能需要第一个和最后一个
1
s的索引:

  int[,] data = new int[,] {
    { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
    { 0, 1, 1, 1, 1, 0, 0, 0, 0, 0},
  };

  (int first, int last)[] result = new (int first, int last)[data.GetLength(0)];

  for (int r = 0; r < data.GetLength(0); ++r) {
    int min = -1;
    int max = -1;

    for (int c = 0; c < data.GetLength(1); ++c) {
      //ToDo: change into "if (data[r, c]) {" if data is of type bool[,]
      if (data[r, c] == 1) {
        max = c;
        min = min < 0 ? c : min;
      }
    }

    result[r] = (min, max);
  } 
让我们来看看:

  Console.Write(string.Join(Environment.NewLine, result));
结果:

  (3, 5)
  (1, 4)
使用系统;
公共课程
{
公共静态void Main()
{
int[,]arr=新int[2,10]{
{0,0,0,1,1,1,0,0,0,0},
{0,1,1,1,1,0,0,0,0,0}
};
int last=-1;
int first=-1;
对于(int i=0;i<2;i++){
对于(int j=0;j<10;j++){
如果(arr[i,j]==1){
如果(第一个==-1){
第一个=j;
}
last=j;
}
}
Console.WriteLine(“行”+i+”->“+”First:+(First+1)+“| Last:+(Last+1));
第一个=-1;
last=-1;
}
}
}
输出

Row 1 -> First : 4 | Last: 6
Row 2 -> First : 2 | Last: 5

在输出中,假设第一个索引为1。

请重新执行,读取和,并提供一个。“为我实现此功能”是本网站的主题。你必须做出诚实的尝试,然后就你的算法或技术提出一个具体的问题。@PranavHosangadi对不起,我不经常使用这个网站,所以我可能忘记了一些规则。如果我编辑了我的问题,提供了一些失败的解决方案,这会有用吗?还是太晚了?谢谢!我仍然有点困惑,因为控制台抛出了一个“索引超出了数组的界限”,而与此同时,脚本工作得很好,并且完成了它需要做的一切。。。我不知道。。。但无论如何,感谢您的时间。在运行之前,您是否更改了阵列大小或其他内容。如果是,那么您也必须更改for循环中的相应值?数组大小可能会有所不同,但我在第二个for循环中使用了array.GetLength,所以这应该不是问题……请使用您的代码创建一个dotnetfiddle。我会设法解决这个问题。很可能,第一次执行Console.WriteLine时,“first”值仍然是-1,即使矩阵都是1。这不是一个主要问题,因为正如我所说,该程序运行良好,但无论如何,我的代码如下:
Row 1 -> First : 4 | Last: 6
Row 2 -> First : 2 | Last: 5