Получение массива double [] строки прямоугольного массива double [,]

Из Отображать номера в научной нотации . ( Копирование / вставка, потому что у страницы возникают проблемы )


Вы можете отображать числа в научной нотации с помощью пакета java.text. Для этого можно использовать DecimalFormat класс в пакете java.text.

В следующем примере показано, как это сделать:

import java.text.*;
import java.math.*;

public class TestScientific {

  public static void main(String args[]) {
     new TestScientific().doit();
  }

  public void doit() {
     NumberFormat formatter = new DecimalFormat();

     int maxinteger = Integer.MAX_VALUE;
     System.out.println(maxinteger);    // 2147483647

     formatter = new DecimalFormat("0.######E0");
     System.out.println(formatter.format(maxinteger)); // 2,147484E9

     formatter = new DecimalFormat("0.#####E0");
     System.out.println(formatter.format(maxinteger)); // 2.14748E9


     int mininteger = Integer.MIN_VALUE;
     System.out.println(mininteger);    // -2147483648

     formatter = new DecimalFormat("0.######E0");
     System.out.println(formatter.format(mininteger)); // -2.147484E9

     formatter = new DecimalFormat("0.#####E0");
     System.out.println(formatter.format(mininteger)); // -2.14748E9

     double d = 0.12345;
     formatter = new DecimalFormat("0.#####E0");
     System.out.println(formatter.format(d)); // 1.2345E-1

     formatter = new DecimalFormat("000000E0");
     System.out.println(formatter.format(d)); // 12345E-6
  }
}  

13
задан Hogan 4 June 2010 в 19:43
поделиться

4 ответа

Вы можете использовать метод Buffer.BlockCopy :

const int d1 = 10;
const int d2 = 3;
const int doubleSize = 8;

double[,] rectArray = new double[d1, d2];
double[] target = new double[d2];

int rowToGet = 3;
Buffer.BlockCopy(rectArray, doubleSize * d2 * rowToGet, target, 0, doubleSize * d2);
18
ответ дан 1 December 2019 в 17:55
поделиться

LINQ to the rescue:

var s = rectArray.Cast<double>().Skip(9).Take(3).ToArray();

Explanation: Кастинг многомерного массива сглаживает его до одномерного массива. После этого нам остается только перейти к нужному элементу (4-й элемент в двумерном массиве разрешается как Skip(9)...) и взять из него 3 элемента).

14
ответ дан 1 December 2019 в 17:55
поделиться

Возможно, вы захотите использовать зубчатый массив. Это не массив 10 на 3, а массив массивов.

Примерно так:

        double[][] rectArray;
         ....
        double [] rowArray = rectArray[3];

Есть много мест, где можно узнать больше о зубчатых массивах. Например Динамически создаваемый прямоугольный массив с зазубринами

3
ответ дан 1 December 2019 в 17:55
поделиться

Если вы должны использовать прямоугольный массив и просто хотите упростить синтаксис, вы можете использовать метод для получения строки так:

double[] fourthRow = GetRow(rectArray, 3);

public static T[] GetRow<T>(T[,] matrix, int row)
{
    var columns = matrix.GetLength(1);
    var array = new T[columns];
    for (int i = 0; i < columns; ++i)
        array[i] = matrix[row, i];
    return array;
}
2
ответ дан 1 December 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: