Member 13390968 Ответов: 2

Есть ли способ объединить массивы вместе? (Режим консоли Visual basic)


Привет, в настоящее время я застрял на задании. Я только что изучил array и использую консольный режим Visual Basic. В задании я объявил 5 одномерных массивов, и все они имеют 30 переменных: имена, test1, test2, test3, total. Это имена студентов, их баллы за тесты и общий балл, который они получили. Можно ввести имена test1, test2 и test3. Проблема в том, что я должен вычислить общий балл, а затем вывести его с соответствующим именем студента. Как мне добавить значения из разных массивов соответственно, чтобы они соответствовали имени студента, и вывести имя студента?

Пример:
Джон - один из студентов, и его оценка хранится в 3 различных массивах. Теперь мне нужно добавить 3 переменные в разных массивах, чтобы получить его общий балл, но не только для Джона, но и для 30 студентов в общей сложности. Можно предположить, что переменная в каждом массиве соответствует массиву "имена". Таким образом, если Джон является первой переменной массива "имена", то первая переменная "test1", "test2", "test3" - это его оценка, и ее нужно сложить вместе. Дело в том, что я должен сделать это для 30 студентов

Что я уже пробовал:

Я не уверен, что я могу сделать с массивами, поэтому я искал примеры или вещи, которые я мог бы сделать с массивами. Я думаю, что делаю вещи, похожие на параллельный массив.

2 Ответов

Рейтинг:
1

Graeme_Grant

Цитата:
нужно рассчитать общий балл и затем вывести его с соответствующим именем студента

Если я правильно прочитал и понял ваш вопрос, то это именно то, что вы ищете:
class Student
{
    public string Name { get; set; }
    public float Score { get; set; }
}
private static void Main()
{
    var List1 = new List<Student>
    {
        new Student { Name="Student 1", Score = 78.1f },
        new Student { Name="Student 2", Score = 88f }
    };

    var List2 = new List<Student>
    {
        new Student { Name="Student 3", Score = 52.7f },
        new Student { Name="Student 1", Score = 48f }
    };

    var results = List1.Concat(List2)
                       .GroupBy(x => x.Name)
                       .Select(x => new Student 
                                    {
                                        Name = x.Key,
                                        Score = x.Sum(y => y.Score)
                                    });

    foreach (var student in results)
    {
        Console.WriteLine($"Student: {student.Name}  > Score: {student.Score:N2}");
    }
}

Который выводит:
Student: Student 1  > Score: 126.10
Student: Student 2  > Score: 88.00
Student: Student 3  > Score: 52.70

ОБНОВЛЕНИЕ: Моя беда, вот в чем дело. VB.NET версия:
Class Student
    Public Property Name() As String
    Public Property Score() As Single
End Class

Module Module1

    Sub Main()

        Dim List1 = New List(Of Student)() From {
            New Student() With {
                .Name = "Student 1",
                .Score = 78.1F
            },
            New Student() With {
                .Name = "Student 2",
                .Score = 88.0F
            }
        }

        Dim List2 = New List(Of Student)() From {
            New Student() With {
                .Name = "Student 3",
                .Score = 52.7F
            },
            New Student() With {
                .Name = "Student 1",
                .Score = 48.0F
            }
        }

        Dim results = List1.Concat(List2) _
                           .GroupBy(Function(x) x.Name) _
                           .Select(Function(x) New Student() With {
            .Name = x.Key,
            .Score = x.Sum(Function(y) y.Score)
        })

        For Each student In results
            Console.WriteLine("Student: {student.Name}  > Score: {student.Score:N2}")
        Next

    End Sub

End Module


Member 13390968

Извините. Я не знаком ни с каким другим языком программирования, кроме консольного приложения/режима Visual Basic.

Graeme_Grant

VB.NET версия добавлена. :)

[редактировать] Ничего не слышал. Работает сейчас?

Thomas Daniels

+5

Graeme_Grant

Спасибо :)

Рейтинг:
0

Thomas Daniels

Если я правильно понимаю, вы хотите иметь сумму всех элементов в массиве. Используйте метод расширения LINQ Сумма[^] :

Dim sum As Integer = yourArray.Sum()


Member 13390968

Вообще-то нет. Может быть, мое объяснение недостаточно ясно. Итак, сначала позвольте мне привести пример.
Джон - один из студентов, и его оценка хранится в 3 различных массивах. Теперь мне нужно добавить 3 переменные в разных массивах, чтобы получить его общий балл, но не только для Джона, но и для 30 студентов в общей сложности. Можно предположить, что первая переменная в каждом массиве соответствует массиву "имена". Таким образом, если Джон является первой переменной массива "имена", то первая переменная "test1", "test2", "test3" - это его оценка, и ее нужно сложить вместе. Дело в том, что я должен сделать это для 30 студентов.

Thomas Daniels

Ах, теперь я понимаю, что пропустил эту часть, когда первоначально читал вопрос. Я полагаю, что ответ Graeme_Grant - это то, что вы ищете.

Graeme_Grant

Я тоже чуть не пропустил его...