- 1
- 2
- 3
- 4
- 5
var languageCodes = locales
.GroupBy(l => l.Key.Substring(0, 2))
.Select(group => group.First())
.Select(l => new KeyValuePair<string, string>(l.Key.Substring(0, 2), l.Value))
.OrderBy(l => l.Value);
Нет AssParallel
А кто там недавно втирал что C# умеет типы выводить похлеще жабы?
как видишь -- умеет.
Погугли уже "вывод типов", стыдно не знать что это такое
> <string, string>
>var
Иди напитонjs, гость.
https://projectlombok.org/features/val.html
Могу предположить, что аргументы в конструкторе коллекций в решетке необязательны. В общем, 3.14159265, пошел на стековерфлоу гуглить, 3.14159265!
Мне очень важно твоё мнение.
В C# статическая типизация, и тип выражения язык умеет вычислять. Потому тип переменной можно не указывать. Можно написать "var foo = 1;" и C# поймет что foo это 1.
Это и называется "вывод типов".
Джава так не умеет, а C# умеет.
JS тут не причем, совершенно непонятно нахя ты его сюда приплел. Видимо ты увидел знакомое слово.
Интересно, а в шарпе так можно?
http://ideone.com/Reoz4Y
А вообще-то KeyValuePair != Tuple
>KeyValuePair.Create(I.Key.Substring(0 , 2), l.Value))
Compilation error
error CS0117: `KeyValuePair' does not contain a definition for `Create'
ЫЫЫ
Интересно, зачем сделали отдельный KeyValuePair, если есть Tuple? Только ради семантичненьких Key и Value?
>хелпер типа крестового std::make_pair можно написать
Отличный вывод!
Ох блядь, неужели к ним царь устроился?
Попытки пояснить что jit маленькие объекты умеет сама, без всяких хинтов на стек запихивать, равно как инлайнить методы без мусорных кейвордов, успехом не увенчались.
Жабий JIT их реально на стек запихивает, или просто на поля разъябывает, инлайнит методы к хуям и выкидывает лишний код и нинужные поля?
JLS-же не дает программисту управлять этим, да и JVM тоже.
А в C# управлять можно. Так, структуру (value type) можно разместить на стеке.
http://ideone.com/FAp3vg
http://ideone.com/ELoDLq
http://ideone.com/If8fo5
А так фолс, потому что тип второго поля не совпал:
http://ideone.com/KVFol8
И так фолс, потому что у второго поля название не совпало:
http://ideone.com/PQ9X1C
И так фолс, потому что порядок не совпал:
http://ideone.com/iCB9Xw
По сравнению с более старыми компиляторами Шарп действительно умный, потому что умеет объединять в один типы, у которых названия, типы и порядок компонентов совпадают.
Турбо Паскаль типы с одинаковой сигнатурой считал разными, если они не объединены тайпдефом. Например, вот так всё работало: А вот так не компилировалось:
Кстати, почему в Шарпе порядок имеет значение? Почему имеет значение порядок полей в сишном типе struct и в паскалевском типе record, понятно: там доступ происходит по физическому смещению от начала записи. Изменишь порядок и смещения будут другими. А в Шарпе как реализован тип {key, value}?
На самом деле в шарпе тоже, только компилятор сам выбирает положение полей. Можно атрибутом поменять положение.
Хз почему они разные. Видимо из-за скорости выполнения. Если бы он просматривал все поля на соответствие, это могло бы занять много времени, бла-бла-бла.
linq обрабатывает одну строку после -> .Select(group => group.First())
Минусует только быдло, не способное в шарп, linq, и подобное.
Борманд придумавает велосипеды, хотя есть ToDictionary()
А пи до сих пор думает, что он программист.