Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перевести из Linq / 25 сообщений из 80, страница 1 из 4
16.01.2016, 07:55
    #39148649
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
Парни. Нужно перевести конструкцию выполненную на Linq в обычный "человечий" код. Совсем не знаком с Linq. Затупил на ".Select(mt => new { MediaType = mt, Delta = Math.Abs(desiredBitRate - mt.AverageBytesPerSecond * 8) } )". Помогите пожалуйста.

Было:
Код: c#
1.
2.
3.
4.
5.
6.
GetOutputMediaTypes(audioSubtype)
.Where(mt => mt.SampleRate == inputFormat.SampleRate && mt.ChannelCount == inputFormat.Channels)
.Select(mt => new { MediaType = mt, Delta = Math.Abs(desiredBitRate - mt.AverageBytesPerSecond * 8) } )
.OrderBy(mt => mt.Delta)
.Select(mt => mt.MediaType)
.FirstOrDefault();



Стало:
Код: c#
1.
2.
3.
4.
5.
6.
7.
 foreach (MediaType mediaType in GetOutputMediaTypes(audioSubtype))
{
    if ((mediaType.SampleRate == inputFormat.SampleRate) && (mediaType.ChannelCount == inputFormat.Channels))
    {
         ???//.Select(mt => new { MediaType = mt, Delta = Math.Abs(desiredBitRate - mt.AverageBytesPerSecond * 8) } )???
    }
}



Вот еще один вариант, требующий проверки знатоков. Все правильно перевел?

Было:
Код: c#
1.
2.
3.
4.
5.
6.
GetOutputMediaTypes(audioSubtype)
.Where(mt => mt.SampleRate == sampleRate && mt.ChannelCount == channels)
.Select(mt => mt.AverageBytesPerSecond*8)
.Distinct()
.OrderBy(br => br)
.ToArray();



Стало:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 List<int> bitRates = new List<int>();
   
 foreach (MediaType mediaType in GetOutputMediaTypes(audioSubtype))
{
    if ((mediaType.SampleRate == sampleRate) && (mediaType.ChannelCount == channels))
    {
        bitRates.Add(mediaType.AverageBytesPerSecond * 8);
    }
}

bitRates.Sort();
return bitRates.ToArray();



Заранее огромное СПАСИБО!
...
Рейтинг: 0 / 0
16.01.2016, 12:09
    #39148714
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
Стесняюсь спросить, а нафига из линк переводить в "это"?
Код: c#
1.
.Select(mt => new { MediaType = mt, Delta = Math.Abs(desiredBitRate - mt.AverageBytesPerSecond * 8) } )



Тут создается из коллекции по типу MediaType коллекция по анонимному типу с тремя полями
...
Рейтинг: 0 / 0
16.01.2016, 12:10
    #39148715
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
т.е. с 2умя полями
...
Рейтинг: 0 / 0
16.01.2016, 13:43
    #39148760
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
PallarisСтесняюсь спросить, а нафига из линк переводить в "это"?
Код: c#
1.
.Select(mt => new { MediaType = mt, Delta = Math.Abs(desiredBitRate - mt.AverageBytesPerSecond * 8) } )



Тут создается из коллекции по типу MediaType коллекция по анонимному типу с тремя полями

Нужно одну библиотеку внедрить в проект который написан под 2.0
...
Рейтинг: 0 / 0
16.01.2016, 17:26
    #39148812
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
Конструкция в Select создаёт объекты на каждый элемент из исходной последовательности, полученной с помощью GetOutputMediaTypes. Только сначала фильтром where проходится, а потом создаёт. Поэтому первая часть вашего "стало" правильная.

Т. е. сначала нужно собрать все объекты в коллекцию, как у вас во втором "стало", только определённого кастомного типа (анонимного или конкретного - как вам больше подойдёт), а не просто int. Т. е. конструкцию с new из select копируете в ваш if.

Затем ещё один цикл по получившейся коллекции, который упорядочивает по Delta.

Затем забрать первый элемент получившейся коллекции и взять его поле MediaType.

Когда распишете всю эту простыню, сравните потом с изначальным LINQ-выражением, проникнитесь краткостью и удобством и ВПЕРЁД - изучать LINQ. Сегодняшний дотнет без линка, это как... ну, это как не знать про классы в ООП. Кстати, также изучите анонимные типы, инициализаторы объектов, делегаты, особенно встроенные в дотнет, типа функций, предикатов, действий (Func, Predicate, Action), и прочее - как видите, всё это с линком очень тесно используется в современном дотнете.
...
Рейтинг: 0 / 0
16.01.2016, 17:27
    #39148813
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
GorloPavel,

Создайте класс с двумя полями MediaType и Delta. Значения для полей можете присваивать в конструкторе класса. А уже в список (List/Dictionary) добавляйте сами экземпляры класса
...
Рейтинг: 0 / 0
16.01.2016, 17:27
    #39148814
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
GorloPavelPallarisСтесняюсь спросить, а нафига из линк переводить в "это"?
Код: c#
1.
.Select(mt => new { MediaType = mt, Delta = Math.Abs(desiredBitRate - mt.AverageBytesPerSecond * 8) } )



Тут создается из коллекции по типу MediaType коллекция по анонимному типу с тремя полями

Нужно одну библиотеку внедрить в проект который написан под 2.0
Какое-нибудь РЖД, Газпром, Сбербанк? Или там до сих пор Дельфи с Паскалем?
...
Рейтинг: 0 / 0
16.01.2016, 17:28
    #39148816
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
AboboGorloPavelпропущено...


Нужно одну библиотеку внедрить в проект который написан под 2.0
Какое-нибудь РЖД, Газпром, Сбербанк? Или там до сих пор Дельфи с Паскалем?
Ну просто реально может быть даже экономически выгоднее переписать всё на новый дотнет, чем заставлять кучу народу из команды поддерживать такие простыни кода вместо удобных линк-выражений и прочих плюшек из современного дотнета.
...
Рейтинг: 0 / 0
16.01.2016, 17:29
    #39148817
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
Abobo,

Человеку не нужно всё "это" современное. Задача запускать всё на .NET 2.0
...
Рейтинг: 0 / 0
16.01.2016, 17:31
    #39148818
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
VSVLADAbobo,

Человеку не нужно всё "это" современное. Задача запускать всё на .NET 2.0
Да я понимаю. Просто, как я сказал, такую древность поддерживать - может, дешевле переписать по-нормальному всё будет? Да и видно же, до чего программистов своих эта контора довела - не знают, что такое LINQ, инициализаторы и прочую азбуку. Их из подвалов 10 лет не выпускали, чтоли, держали на голодном 2.0?
...
Рейтинг: 0 / 0
16.01.2016, 17:35
    #39148820
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
AboboVSVLADAbobo,

Человеку не нужно всё "это" современное. Задача запускать всё на .NET 2.0
Да я понимаю. Просто, как я сказал, такую древность поддерживать - может, дешевле переписать по-нормальному всё будет? Да и видно же, до чего программистов своих эта контора довела - не знают, что такое LINQ, инициализаторы и прочую азбуку. Их из подвалов 10 лет не выпускали, чтоли, держали на голодном 2.0? про древность мне понравилось
...
Рейтинг: 0 / 0
16.01.2016, 17:41
    #39148825
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
skyANAAboboпропущено...

Да я понимаю. Просто, как я сказал, такую древность поддерживать - может, дешевле переписать по-нормальному всё будет? Да и видно же, до чего программистов своих эта контора довела - не знают, что такое LINQ, инициализаторы и прочую азбуку. Их из подвалов 10 лет не выпускали, чтоли, держали на голодном 2.0? про древность мне понравилось
ХР наше всё!
...
Рейтинг: 0 / 0
16.01.2016, 17:43
    #39148826
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
AboboskyANAпропущено...
про древность мне понравилось
ХР наше всё!нет, Kanban
...
Рейтинг: 0 / 0
16.01.2016, 17:49
    #39148829
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
skyANAAboboпропущено...

ХР наше всё!нет, Kanban
Вот и правда, что кабан свинья, раз заставляет команду поддерживать всякое овно - "патамушта закащик хочит страннава".
...
Рейтинг: 0 / 0
16.01.2016, 18:01
    #39148833
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
AboboskyANAпропущено...
нет, Kanban
Вот и правда, что кабан свинья, раз заставляет команду поддерживать всякое овно - "патамушта закащик хочит страннава".обычные цикл - это значит уже "всякое овно".. да Вы.. Классный
...
Рейтинг: 0 / 0
16.01.2016, 20:18
    #39148880
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
skyANAAboboпропущено...

Вот и правда, что кабан свинья, раз заставляет команду поддерживать всякое овно - "патамушта закащик хочит страннава".обычные цикл - это значит уже "всякое овно".. да Вы.. Классный
Ну я классный, а "обычные циклы" в таких случаях - всякое овно. Вы бы ещё сказали, что на тракторах пашут только хипстеры, а настоящие мужики лопатами всё поле перекапывают.

Тут недавно один был, который "руки отрывал за LINQ". Трудно, говорит, дебажить эти выражения. Предложил ему вообще компьютер выкинуть и отойти от дел - чтобы совсем легко стало.

skyANA, а у вас где водораздел проходит между циклами и линком? Т. е. когда вы решаете, что "линк ещё можно", а "циклы пока нельзя"? Или сразу руки отрываете за любые линк-выражения, и принудительно насаждаете циклы?
...
Рейтинг: 0 / 0
16.01.2016, 20:35
    #39148884
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
Не глубокий знаток C#, только учусь, был заинтригован LINQ, прочитал недавно книжку , там русским по белому написано "цель создания: упростить разаработку, но не ускорить работу кода. Хотите супер скоростей - не используйте LINQ". В 99% случаев важно удобство, т.е. компактность и простота кода, тут LINQ как раз кстати.
...
Рейтинг: 0 / 0
16.01.2016, 20:48
    #39148888
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
AboboskyANAпропущено...
обычные цикл - это значит уже "всякое овно".. да Вы.. Классный
Ну я классный, а "обычные циклы" в таких случаях - всякое овно. Вы бы ещё сказали, что на тракторах пашут только хипстеры, а настоящие мужики лопатами всё поле перекапывают.

Тут недавно один был, который "руки отрывал за LINQ". Трудно, говорит, дебажить эти выражения. Предложил ему вообще компьютер выкинуть и отойти от дел - чтобы совсем легко стало.

skyANA, а у вас где водораздел проходит между циклами и линком? Т. е. когда вы решаете, что "линк ещё можно", а "циклы пока нельзя"? Или сразу руки отрываете за любые линк-выражения, и принудительно насаждаете циклы?я не насаждаю ни линк, ни циклы, ни монады :) не намекаю на производительность. Просто забавно.

Что вы думаете о Kotlin?
...
Рейтинг: 0 / 0
16.01.2016, 21:32
    #39148901
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
skyANAЧто вы думаете о Kotlin?
Джет Брейнс маются хернёй. Кучка талантливых программистов решила поработать занозой в заднице у всяких крупняков, типа МС, в надежде, что их или их продукты у них этот крупняк купит. Судя по малипусенькому ревенью (по-быстрому гуглится оценка что-то около 1 мегабакса или ниже, хотя, для 500 сотрудников это как-то вообще за гранью - думаю, они всё же гораздо больше зарабатывают, а эти оценки - фигня; вобщем, хрен с ним, с ревенью) и Котлину, который спустя несколько лет всё ещё бета, дела у них идут не очень. МС не хочет покупать их Решарпер, и постепенно наполняет Студию его функциональностью. Котлин остаётся игрушкой для глупых хипстеров (ещё болшей игрушкой, чем Свифт для иосников). Остаётся одна Идея, которая на винде не нужна (ибо есть Студия), а на линуксах всяких много не заработаешь.

Вобщем, думаю, не стоит ставить на эти котлины и вообще на Джет Брейнс. Либо их или их продукты купят с последующими похоронами, либо они просто разорятся, когда уже ничего толком не смогут предложить, а крупняк все их основные идеи внедрит/разработает у себя сам. И пусть вас не вводят в забдуждение слюнтявые восторги на всяких хабрах - там те ещё гики-фанаты всякого "хочется странного".

Ну, это так, взгляд дилетанта со стороны. Про Котлин прочитал по-быстрому толкьо щас, а до этого только пару раз слышал такое слово...

UPD. А, вот оно откуда пошло. Котлин - класс кораблей советских, а в Джет Брейнс окопались старпёры-имперцы, тоскующие по СССР, ненавидящие всё западное и в душе стремящиеся "отомстить за всё этим проклятым американцам". Иначе трудно понять упорство этих русских в явно безнадёжной возне с этими ихними котлинами, решарперами и идеями. Ну да, ребята талантливы. Но их бы энергию да в нужное капиталистическое русло, а не в пустое бодалово без дальнейших существенных перспектив. Как я уже сказал, максимум, что им грозит, это покупка крупняком и похороны их продуктов как отдельных вещей - будут внедрены в уже существующие разработки крупняка. Ну а за то, что они русские и ваще, навряд ли их кто купит (эти иваны ещё, поди, и продаваться не хотят) - так что их просто обанкротят. Но свой след в истории они таки оставят, как разработчики кучи всякого "хочется странного". Ну а обычным разработчикам не советую идти на поводу у них и не завязываться сильно на их продукты - в лучшем случае будут потом драть втридорога, а в худшем - см. про похороны и банкротство.
...
Рейтинг: 0 / 0
16.01.2016, 21:41
    #39148903
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
Не, реально щас пошерстил статьи на Хабре. Кучка укуренной хипстоты пытается что-то калякать на бета-языке уже второй год. Убивать надо за такое, если это в продакшон идёт.

А джетбрейнсы ваще обнаглели - без стеснения используют Котлин как иглу для своей Идеи. Видно, всё же решили не продаваться, а бодаться сами. Значит, будут драть втридорога, а потом их обанкротят - т. е. хипстоте, повёдшейся на них, достанется по самому худшему варианту. И поделом.
...
Рейтинг: 0 / 0
16.01.2016, 21:55
    #39148911
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
GorloPavel,

если хотите полностью съэмулировать LINQ, то, фактически, на каждую конструкцию, типа Select, Order, Where и пр. вам надо отдельный цикл городить. Ведь линк работает через итераторы последовательно, поэтому каждый следующий метод последовательно проходит по результатам предыдущего метода. Можете, конечно, попытаться сгородить вложенные циклы или сразу несколько операций в одном выполнить, только тогда вероятность ошибиться при этом будет больше, чем в таких простых линк-выражениях, как у вас или когда вы их развернёте в отдельные циклы.
...
Рейтинг: 0 / 0
16.01.2016, 22:01
    #39148919
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
skyANA,

чёт проблемки какие-то у этого вашего "Котлина" - плохо на многих ядрах работает, как докладуют с полей. Чём там с многоядерной работой у проклятой Студии от проклятой МС?
...
Рейтинг: 0 / 0
17.01.2016, 10:03
    #39148995
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
Abobo, эвано как Вас бомбануло :) не читал
...
Рейтинг: 0 / 0
17.01.2016, 11:18
    #39149008
Abobo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
skyANAAbobo, эвано как Вас бомбануло :) не читал
Читать всегда не поздно научиться. А тут главное, локти потом не кусать. Всякие борланды и эмбаркадеры покруче так в разы были, чем эти нынешние джет брейнсы. А где они щас? Так же, где и Дельфи.
...
Рейтинг: 0 / 0
17.01.2016, 13:11
    #39149037
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевести из Linq
AboboskyANAAbobo, эвано как Вас бомбануло :) не читал
Читать всегда не поздно научиться.Не вижу смысла учиться читать вбросы про овно, хипстеров, херню, проклятую студию и проклятый МС. Смысла ноль, юмора ноль, засим проскипал :)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перевести из Linq / 25 сообщений из 80, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]