Форум программистов, компьютерный форум CyberForum.ru

Swift

Войти
Регистрация
Восстановить пароль
 
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
#1

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

15.06.2016, 03:43. Просмотров 635. Ответов 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) ")
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2016, 03:43     Как вывести средний бал ученика в журнале (словарь) через цикл for-in?
Посмотрите здесь:
Рассчитать средний бал каждого ученика и средний бал по каждому предмету Pascal
Средний бал ученика C++
Получить средний бал в зависимости от даты и ученика MySQL
Turbo Pascal Вычислить средний бал учеников класса, если известны оценки каждого ученика
Как вывести средний бал? C#
Turbo Pascal Вывести фамилии студентов, средний бал которых больше, чем общий средний балл
посчитать средний балл и вывести ученика с такой-же оценкой как и средний балл Turbo Pascal
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
17.06.2016, 08:55     Как вывести средний бал ученика в журнале (словарь) через цикл for-in? #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)")
}
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
17.06.2016, 12:34  [ТС]     Как вывести средний бал ученика в журнале (словарь) через цикл for-in? #3
Благодарю, cin_cout, сам не потянул, учусь только.
Vorona
Peace 2 all shining faces
667 / 529 / 45
Регистрация: 05.03.2010
Сообщений: 1,273
23.06.2016, 13:15     Как вывести средний бал ученика в журнале (словарь) через цикл for-in? #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) }                               // вывели каждый результат в консоль
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
23.06.2016, 18:30  [ТС]     Как вывести средний бал ученика в журнале (словарь) через цикл for-in? #5
Спасибо, Vorona, до методов и $ еще не дошел, смысл понятен, и да у словарей доступ к значениям вроде через ключи, а здесь - индексы?
Vorona
Peace 2 all shining faces
667 / 529 / 45
Регистрация: 05.03.2010
Сообщений: 1,273
23.06.2016, 19:24     Как вывести средний бал ученика в журнале (словарь) через цикл for-in? #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. сорри если много информации со старта
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2016, 16:02     Как вывести средний бал ученика в журнале (словарь) через цикл for-in?
Еще ссылки по теме:
Расчитать средний бал каждого по всем предметам и вывести фио учеников чей средний балл выше Turbo Pascal
Вывести средний бал всех студентов C++
Turbo Pascal Вывести студентов средний бал которых больше за 4
C++ Вывести фамилии студентов средний бал которых больше 4
Вывести студентов которые имеют средний бал, который больше 85 Pascal

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

Или воспользуйтесь поиском по форуму:
Perforator
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
24.06.2016, 16:02  [ТС]     Как вывести средний бал ученика в журнале (словарь) через цикл for-in? #7
Спасибо, Vorona, за подробное объяснение, в туториалах глянул сегодня, действительно мощно и красиво методы с данными работают, в плейграунде поработаю с ними, разобраться в деталях надо.
Благодарю за помощь!
Yandex
Объявления
24.06.2016, 16:02     Как вывести средний бал ученика в журнале (словарь) через цикл for-in?
Ответ Создать тему
Опции темы

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