Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Собрать список?

1052  1 2 все
Программист коренной житель23.06.19 22:43
NEW 23.06.19 22:43 
в ответ Murr 23.06.19 10:16
Только вот в условиях задачки указано требование - не использовать foreach (добавлю - while, for, do, ForEach), а делать исключительно LINQом.

Во-первых, LINQ использует foreach.

Во-вторых, чем тебе не нравится string.Join?

#21 
Murr патриот24.06.19 00:32
Murr
NEW 24.06.19 00:32 
в ответ AlexNek 23.06.19 22:35

Может эта идея поможет?

-----

Проблема в том, что Я не вижу как...

#22 
Murr патриот24.06.19 00:34
Murr
NEW 24.06.19 00:34 
в ответ Программист 23.06.19 22:43

Что ЛИНК испошьзует внутри - меня интересует очень мало.


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

#23 
Программист коренной житель24.06.19 08:21
NEW 24.06.19 08:21 
в ответ Murr 24.06.19 00:34
Вопрос в том, можно ли решить задачку в указанных ограничениях - без написания явных циклов.

return string.Join(", ", this.Select(r => ((Row)r).OrderNo), 1, 3);

#24 
Murr патриот24.06.19 10:37
Murr
NEW 24.06.19 10:37 
в ответ Программист 24.06.19 08:21

Не проверяя что там в параметрах могу сказать, что результат правильным не будет - должен быть массив строк.

В том примере, который привел AlexNek, как раз получается массив из трех строк.


Ну вот - глянул в параметры - так и есть - начиная с и количество. Не то.

#25 
Программист коренной житель24.06.19 13:42
NEW 24.06.19 13:42 
в ответ Murr 24.06.19 10:37
      string[] grades = { "59", "82", "70", "56", "92", "98", "85" };
      IEnumerable<string> data =  grades.GroupBy(x => Array.IndexOf(grades, x) / 3, (x, list)=>string.Join(",", list));

А вообще странные у тебя словия и задачи :D :D :D

#26 
Murr патриот24.06.19 15:37
Murr
NEW 24.06.19 15:37 
в ответ Программист 24.06.19 13:42

А вообще странные у тебя словия и задачи

-----

Чем странны мои пятничные задачки?

Тем, что заставляют/позволяют взглянуть на вполне традиционные исходные данные и решение и, потом, подумать над несколько нестандартным решением в непонятных ограничениях?

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

Решение, кстати, мне понравилось. Компактностью. Именно то, что хотел.

Осталась, у меня, проблема - понять как оно работает. безум Ну да это моя проблема - куда рыть уже примерно понятно, осталось - рыть.

#27 
AlexNek патриот24.06.19 22:57
AlexNek
NEW 24.06.19 22:57 
в ответ Murr 24.06.19 00:32
Проблема в том, что Я не вижу как...

А у меня проблема понять что же тебе действительно нужно смущ

Нафига, уже даже и не думаю. спок

#28 
Murr патриот25.06.19 10:42
Murr
NEW 25.06.19 10:42 
в ответ AlexNek 24.06.19 22:57

Ну сейчас-то понЯл? смущ

#29 
Программист коренной житель25.06.19 11:16
25.06.19 11:16 
в ответ Murr 24.06.19 15:37
Осталась, у меня, проблема - понять как оно работает.

Группирует по индексу и далее формирует строку string.Join'ом

Если индекс элемента в массиве поделить на необходимое количество элементов в строке, то получится признак, по которому можно группировать.


Все просто. Я правда сомневаюсь в эффективности этого решения, но зато без циклов :D

#30 
Murr патриот25.06.19 11:38
Murr
NEW 25.06.19 11:38 
в ответ Программист 25.06.19 11:16

Группирует по индексу и далее формирует строку string.Join'ом

-----

Я понимаю что оно делает,

Я не понимаю как оно работает.

Т.е. не понимаю во что развернется выражение и как и какие параметры будут передаваться.

Пока - не понимаю. Надо копать.


Я правда сомневаюсь в эффективности этого решения

------

Решение - в указанных ограничениях - эффективно.

Остальное надо тестить, но будет не шибко плохо.

По крайней мере 30 строк с тремя циклами и пятеркой ифов - местами у меня именно так написано - эффективнее не будут.

У меня просто МНОГО кода. Любое сокращение объема - будет во благо. Даже с потерей производительности.

#31 
AlexNek патриот25.06.19 22:14
AlexNek
NEW 25.06.19 22:14 
в ответ Murr 25.06.19 10:42

ну как тебе сказать...

Теоретически как-то понятно , но непонятно зачем делать так, что самому нужно вначале разобраться. смущ

И зачем массив массивов, когда "удобнее" массив в цикле. Скобки специально для тебя бебе


#32 
Murr патриот25.06.19 22:36
Murr
NEW 25.06.19 22:36 
в ответ AlexNek 25.06.19 22:14

"удобнее"

------

Удобнее - бывает разное.

Мне сейчас удобнее - ужать размер кода, даже если Я чуток потеряю в производительности и малехо в читабельности/понимабельности.

Просто слишком много кода.


А понимабельность - придет со временем. Все одно эту часть придется доучивать. Еще и шаблоны в очереди...

#33 
Murr патриот19.07.19 14:09
Murr
NEW 19.07.19 14:09 
в ответ Murr 25.06.19 22:36

Вот подвсплыло еще немного LINQ...


Код:


List<DataColumn> duplicatedColumns = dt.Columns.Cast<DataColumn>()
.Where(dc => additionalColumns.Any(p => p.ColumnName == dc.ColumnName))
.ToList();
foreach(DataColumn column in duplicatedColumns)
{
dt.Columns.Remove(column);
}



Делает простую работу - удаляет из таблицы колонки которые там уже есть и есть в списке additionalColumns.

Остальное - остается на месте.


Почему так - не суть важно, но если интересно - заменяется тип колонки и дефаултное значение.


Вопросик над которым думаю:

- Можно ли написать все тоже самое, но без цикла в конце?

Т.е. нужно чтобы дублирующие (по имени) колонки были удалены.


П.С. Про то, что LINQ не является языком манипулации данными Я в курсе. Как обойти?

П.П.С. Про то, что источник данных длйa итератора не должен менятся в процессе - разумеется тоже.

#34 
Murr патриот30.08.19 13:21
Murr
NEW 30.08.19 13:21 
в ответ Murr 19.07.19 14:09

Снова споткнулся об гения билли...


Задача - та же - собрать список с разделителями.


Измемения - одна часть списка уже собрана. Источник первой части уже не доступен.

Ограничения - собранная часть может быть нулл или емпти.

Стринг.Йон нас нуллах просто обломается, для пустой строки - добавит ненужный сепаратор.


Облом - надо пересраивать логику построения...


Хватит ли Униона для решения проблемы?

#35 
AlexNek патриот30.08.19 21:21
AlexNek
NEW 30.08.19 21:21 
в ответ Murr 30.08.19 13:21
Хватит ли Униона для решения проблемы?

А шо за товарищъ? А Иёфа Моиселсвича не хватит?

#36 
Murr патриот12.09.19 16:09
Murr
NEW 12.09.19 16:09 
в ответ AlexNek 30.08.19 21:21

не хватит?

-----

Нее, не хватит...

Униона - голого - тожА не хватило - пришлось заворачивать в массив...

#37 
AlexNek патриот12.09.19 21:53
AlexNek
NEW 12.09.19 21:53 
в ответ Murr 12.09.19 16:09
Нее, не хватит...

не понял, а что тебе не хватит?


if(String.IsNullOrEmpty(x))....

#38 
Murr патриот13.09.19 16:08
Murr
NEW 13.09.19 16:08 
в ответ AlexNek 12.09.19 21:53

что тебе не хватит?

-----

Эээ.... квадратного... в рыжу полосковую... смущ

#39 
1 2 все