Форум программистов, компьютерный форум, киберфорум
Наши страницы

Swift

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

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

15.06.2016, 03:43. Просмотров 675. Ответов 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):

Рассчитать средний бал каждого ученика и средний бал по каждому предмету - Pascal
Подскажите как решать плз! 1)Написать программу создающую на диске файл следующей структуры: Фамилия 1 (например Сидоров) оценки...

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

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

Вычислить средний бал учеников класса, если известны оценки каждого ученика - Turbo Pascal
Вычислить средний бал учеников класса, если известны оценки каждого ученика по математике, русскому языку и физике. Распечатать список...

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

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

6
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
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
669 / 531 / 45
Регистрация: 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
669 / 531 / 45
Регистрация: 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
Привет! Вот еще темы с ответами:

посчитать средний балл и вывести ученика с такой-же оценкой как и средний балл - Turbo Pascal
ребят как посчитать средний бал и вывести ученика с такой-же оценкой как и средний бал? Program zashitastroki; Uses crt; Type...

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

Вывести средний бал всех студентов - C++
Помогите пожалуйста с задачей. Создать массив структур, содержащий информацию о студентах: ФИО, номер группы, оценки за последнюю...

Вывести студентов средний бал которых больше за 4 - Turbo Pascal
Здраствуйте, нужен вас совет по ооп, переделываю программу в которой нужно было вывести студентов средний бал которых больше за 4: Вот...


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

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

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