Sie das Iterierte über alle Spalten der Zeile müssen überprüfen, ob es eine 1
existiert.
Beispielcode:
for (int row = xa; row < 50; row++) {
int bIsOne = 0;
for (int i = 0;i < col_size && !bIsOne; i++) {
bIsOne = bIsOne | schemaArray[row][i];
}
if(bIsOne)
printf("1 found in row %d\n",row);
}
Dies kann nicht mit bitweise Operatoren durchgeführt werden, wenn Sie ein Bitmap für die schemaArray
konstruieren. In diesem Fall können Sie die gesamte Zeile auf einmal überprüfen.
Dies ist meist ein Overkill. Tun Sie es nur, wenn Ihr Code leistungsabhängig ist.
Vorverarbeitungsschritt: Konstruieren Sie eine Bitmap-Array für schemaArray
long long bitMapSchemaArray[ROW_SIZE];
for (int i = 0; i < row_count; i++) {
long long columnBitMap = 0;
for (int j = 0; j < col_count; j++) {
columnBitMap <<= 1; // Multiplies by 2
columnBitMap = columnBitMap | schemaArray[i][j]; // Add a 1 if schemaArray[i][j]=1 else 0
}
bitMapSchemaArray[i] = columnBitMap;
}
In Ihrer Funktion können Sie dann verwenden, um die Bitmap als:
for (int i = 0; i < row_count; i++) {
if(bitMapSchemaArray[i])
printf("There is a 1 in %d row\n", i+1);
}
jedoch höchstens, werden Sie in der Lage sein zu haben 64 Spalten in 2-D
Array unter der Annahme, dass wir ein Array von 64-Bit-Ganzzahlen verwenden. Natürlich können Sie dies auch extrapolieren, um mehr als 64 Spalten zu haben, indem Sie ceil(column_count)/64
64-Bit-Ganzzahlen verwenden. In diesem Fall bitweise ODER jede Spalte, um zu überprüfen, ob das kumulative Ergebnis noch nicht Null ist.
Der Compiler sagt Ihnen, Sie verwenden es für falsch, da die 'if (| schemaArray [Zeile] == 1)' Zustand nicht kompilieren. Es wird Ihnen jedoch nicht sagen, wie Sie es richtig verwenden. –