Заполните многомерный массив парами упорядоченных значений - PullRequest
0 голосов
/ 25 сентября 2019

Я должен представить 16 финансовых продуктов в матрице 4х4 на сайте.Матрица заменяет представление графика рассеяния, где результаты продукта представлены по оси X, а риск по оси Y (это просто пары значений), поэтому продукт в нижнем левом месте - это продукт сс незначительным риском и незначительными доходами, и те, что в верхнем правом углу, являются теми, которые имеют основной риск и основной доход.Чтобы достичь этого результата, я подумал о том, чтобы поместить продукты в многомерный массив 4x4, но я не знаю, как правильно сортировать пары значений.Я пробовал некоторые методы сортировки, но никто не дал мне требуемого результата.

Вот пример того, что я хочу получить: Взяв эту шестнадцать пар значений: (3,5) - (2,8) - (7,3) - (4,9) - (3,2) - (4,10) - (6,2) - (1,4) - (5,2) - (8,9) - (7,11) - (10,12) - (3,11) - (5,10) - (2,16) - (9,15)

Я бы хотел показать это в матрице в таком порядке

Y
^
|(7,3)(8,9)(10,12)(9,15)
|(5,2)(6,2)(5,10)(7,11)
|(3,2)(3,5)(4,9)(4,10)
|(1,4)(2,8)(3,11)(2,16)
|_____________________>X

1 Ответ

0 голосов
/ 25 сентября 2019

Если я не понимаю вашу проблему, мне кажется, вам нужно отсортировать свою коллекцию линейно (1-мерно), а затем представить ее (2-мерно).Существует различие между хранением данных и представлением данных.Вот что я придумал:

//Sample data to work with
var products = new List<KeyValuePair<string, int>>();
products.Add(new KeyValuePair<string, int>("A", 12));
products.Add(new KeyValuePair<string, int>("B", 23));
products.Add(new KeyValuePair<string, int>("C", 62));
products.Add(new KeyValuePair<string, int>("D", 17));
products.Add(new KeyValuePair<string, int>("E", 11));
products.Add(new KeyValuePair<string, int>("F", 75));
products.Add(new KeyValuePair<string, int>("G", 95));
products.Add(new KeyValuePair<string, int>("H", 24));
products.Add(new KeyValuePair<string, int>("I", 85));
products.Add(new KeyValuePair<string, int>("J", 41));
products.Add(new KeyValuePair<string, int>("K", 76));
products.Add(new KeyValuePair<string, int>("L", 77));
products.Add(new KeyValuePair<string, int>("M", 33));
products.Add(new KeyValuePair<string, int>("N", 81));
products.Add(new KeyValuePair<string, int>("O", 34));
products.Add(new KeyValuePair<string, int>("P", 45));

//Sort the collection
List<KeyValuePair<string, int>> ordered = products.OrderBy(x => x.Value).ToList();

//Put linear results into 2D array (4x4)
var matrix = new KeyValuePair<string, int>[4,4];
for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
        matrix[i, j] = ordered[i * 4 + j];

//Write out results
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        var c = ordered[i * 4 + j];
        Console.Write(c.Key + ": " + c.Value.ToString() + "    ");
    }
    Console.WriteLine();
}

Вывод:

E: 11    A: 12    D: 17    B: 23    
H: 24    M: 33    O: 34    J: 41    
P: 45    C: 62    F: 75    K: 76    
L: 77    N: 81    I: 85    G: 95
...