Форум программистов, компьютерный форум, киберфорум
Наши страницы
Swift
Войти
Регистрация
Восстановить пароль
 
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
#1

Как вывести средний бал ученика в журнале (словарь) через цикл for-in? - Swift

15.06.2016, 03:43. Просмотров 744. Ответов 6
Метки нет (Все метки)

typealias markes = [String: [String: UInt]]
var register: markes = ["Petrov": ["date1": 3, "date2": 4 ], "Ivanov": ["date1": 4, "date2": 5], "Sidorov": ["date1": 4, "date2": 2]]

for ? in register {

for ? in ? {


print(" \(name) получает средний балл \(middleMarkPetrov) ")
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2016, 03:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как вывести средний бал ученика в журнале (словарь) через цикл for-in? (Swift):

Рассчитать средний бал каждого ученика и средний бал по каждому предмету
Подскажите как решать плз! 1)Написать программу создающую на диске файл...

Средний бал ученика
Была дана задача. Создать программу для подсчёта среднего бала учеников 1го...

Получить средний бал в зависимости от даты и ученика
Есть таблица marks со столбцами: id (int11) student (int11) - id ученика...

Вычислить средний бал учеников класса, если известны оценки каждого ученика
Вычислить средний бал учеников класса, если известны оценки каждого ученика по...

Как вывести средний бал?
На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов...

Вывести фамилии студентов, средний бал которых больше, чем общий средний балл
Вычислить средний балл всех студентов по всем предметам. Вывести фамилии...

6
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 120
17.06.2016, 08:55 #2
Например:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
var register = [ "Petrov": ["Physics": 5, "Geometry": 3, "Algebra": 4], "Ivanov": ["Physics": 3, "Geometry": 5, "Algebra": 5]]
 
for pupil in register {
    let pupilMarks = pupil.1
    var sum: Float = 0.0
    for mark in pupilMarks {
        sum = sum + Float(mark.1)
    }
    let averageMark = sum / Float(pupilMarks.count)
    print("\(pupil.0) получает средний балл \(averageMark)")
}
1
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
17.06.2016, 12:34  [ТС] #3
Благодарю, cin_cout, сам не потянул, учусь только.
0
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
23.06.2016, 13:15 #4
Или так, чисто и функционально
for-in чаще всего не нужен, как и объявление значений при помощи var

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let register = [
    "Petrov": ["Physics": 5, "Geometry": 3, "Algebra": 4],
    "Ivanov": ["Physics": 3, "Geometry": 5, "Algebra": 5]
]
 
let results = register.map { student -> String in
    let classes = student.1                                 // получили уроки
    let total = classes
        .map { $0.1 }                                       // получили оценки
        .reduce(0, combine: +)                              // просуммировали оценки
    let average = Double(total) / Double(classes.count)     // высчитали средний балл
    return "\(student.0) получает средний балл \(average)"  // вернули результат
}
 
results.forEach { print($0) }                               // вывели каждый результат в консоль
1
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
23.06.2016, 18:30  [ТС] #5
Спасибо, Vorona, до методов и $ еще не дошел, смысл понятен, и да у словарей доступ к значениям вроде через ключи, а здесь - индексы?
0
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
23.06.2016, 19:24 #6
Цитата Сообщение от Perforator Посмотреть сообщение
и да у словарей доступ к значениям вроде через ключи, а здесь - индексы
Так и есть, но это не те индексы, которые перечисляются, это индекс, по которому мы получаем элемент из кортежа пары ключ-значение.
Если мы захотим достать значение из списка по индексу, то выглядеть это будет так:
Код
let value = array[42]
А кортежи, это такой "ad-hoc" тип данных, который может хранить разные по типу элементы. И каждый кортеж имеет свой тип, потому если вы попытаетесь достать элемент по индексу, которого не существует, то получите ошибку еще в процессе компиляции. Выглядит это так
Код
let tuple = (42, "some message")
и чтобы получить сообщение из этого кортежа, можно просто сказать
Код
tuple.1
Дело тут в том, что метод map для словаря реализован таким образом, что он отдает кортеж той функции, которую мы передаем в map. Например, в C# за это отвечает отдельный тип KeyValuePair<K,V> у которого есть такие свойства, как key и value. Создатели Swift решили не заморачиваться созданием нового типа, а использовать кортеж, т.к. он идеально подходит для этого случая.

Т.е. если просто иметь словарь, то чтобы получить значение по ключу, нужно просто написать
Код
let value = dictionary["key"]
Но мы хотим пройти по всем значениям словаря и сделать что-то с каждым из них, так вот каждое из значений словаря представлено в виде пары ключ-значение, и реализовано при помощи кортежа.

P.S. сорри если много информации со старта
1
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
24.06.2016, 16:02  [ТС] #7
Спасибо, Vorona, за подробное объяснение, в туториалах глянул сегодня, действительно мощно и красиво методы с данными работают, в плейграунде поработаю с ними, разобраться в деталях надо.
Благодарю за помощь!
0
24.06.2016, 16:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2016, 16:02
Привет! Вот еще темы с решениями:

посчитать средний балл и вывести ученика с такой-же оценкой как и средний балл
ребят как посчитать средний бал и вывести ученика с такой-же оценкой как и...

Расчитать средний бал каждого по всем предметам и вывести фио учеников чей средний балл выше
Здравствуйте я пытался написать програму код будет ниже нужно сделать чтобы он...

Посчитать средний бал группы и вывести список студентов, у которых средний балл выше среднего балла группы
Составить список студентов, в который входит 5 человек. Для каждого студента...

Вывести средний бал всех студентов
Помогите пожалуйста с задачей. Создать массив структур, содержащий...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru