powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
23 сообщений из 98, страница 4 из 4
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736448
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proiskatelsqlкстати, Length чтоль использовать?Ты осознаешь, что Length - это просто свойство, которое можно просто прочитать, а Count() - это метод, который получит энумератор и переберет через него все ячейки массива, чтобы узнать количество элементов, которое и так лежит в Length?

Конечно, многие задачи не имеют критичности в производительности, но не до такой же степени!
Count() проверяет типы на ICollection<T>, IList<T> наследует ICollection<T>, по этому если делать для них, то так не будет работать, но к массивам это не относится
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736449
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql Roman Mejtes, Shocker.Pro,


Если вы обратите внимание, это не мой код... я туда только *t добавил...

кстати, Length чтоль использовать? а это "Получите IEnumerable<IEnumerable<T>> и легко сможете получить IEnumerable<T[]> без всяких count()." я вообще не понял
Уже кидал пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
class Program
{
    static void Main(string[] args)
    {
        IEnumerable<int> sourceEnumerable = Enumerable.Range(0, 86);
        IEnumerable<int[]> split = sourceEnumerable.Split(3).Select(p => p.ToArray());
        foreach (int[] bucket in split)
        {
            Console.Write("{ ");
            foreach (int i in bucket)
            {
                Console.Write($"{i:000} ");
            }
            Console.WriteLine("}");
        }
        Console.ReadKey();
    }
}

public static class EnumerableSplitter
{
    /// <summary> Разбивает перечисление на перечисления меньшего размера и возвращает пачками\корзина </summary>
    /// <param name="source">Исходное перечисление</param>
    /// <param name="bucketCapacity">Размер пачки\корзины</param>
    /// <returns>Перечисления пачек\корзин</returns>
    public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int bucketCapacity)
    {
        if (bucketCapacity < 1) throw new ArgumentOutOfRangeException(nameof(bucketCapacity));

        using (IEnumerator<T> enumerator = source.GetEnumerator())
        {
            while (enumerator.MoveNext())
            {
                yield return GetBucket(enumerator, bucketCapacity);
            }
        }
    }

    private static IEnumerable<T> GetBucket<T>(IEnumerator<T> enumerator, int bucketCapacity)
    {
        int count = 0;
        do
        {
            yield return enumerator.Current;
        }
        while (++count < bucketCapacity && enumerator.MoveNext());
    }
}
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736450
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlДогадывался, но конкретных подтверждений не видел, кто его знает как оно внутри устроено... Теперь будем знать
Нетрудно ж посмотреть исходники - https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,41ef9e39e54d0d0b
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736452
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

я к тому что эта Length вполне могла бы содержать тотже самый Count в get.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736460
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlя к тому что эта Length вполне могла бы содержать тотже самый Count в get.Не могла. Очевидно, Linq появился в .Net гораздо позже, чем массивы. Ну и стоило бы понимать саму суть массивов.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736464
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

я и не про Linq Count а про то что этот Length из себя представляет. некоторую переменную которая обновляется при всех операциях с массивом, замедляя эти операции, или всетаки пересчет элементов при обращении к свойству.

а если пересчет, то какая нафик разница Linq это пересчет или нет...
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736466
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql,

Метод get свойства Array.Length имеет атрибут [MethodImpl(MethodImplOptions.InternalCall)]
https://referencesource.microsoft.com/#mscorlib/system/array.cs,42e9b7616956cf94

Т.е., вероятно, это свойство реализовано на уровне операционки, а значит, быстрей в дотнете все-равно никак не сделаешь...
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736468
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlкоторая обновляется при всех операциях с массивом,Это при каких же операциях она обновляется?
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736470
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proiskatelsqlкоторая обновляется при всех операциях с массивом,Это при каких же операциях она обновляется?
Да, действительно))
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736471
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proiskatelsqlкоторая обновляется при всех операциях с массивом,Это при каких же операциях она обновляется?

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

я честн не заморачивался с этим, в моих нынешних задачах масивы пару сотен элементов, так что затраты времени на оптимизацию не окупятся. так, на будушее спросил
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736472
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proiskatelsqlкоторая обновляется при всех операциях с массивом,Это при каких же операциях она обновляется?
даже если речь идет про Count, получить значение поля, это не то же самое, что перечислить все элементы,
в первом случае сложность O(1), во втором O(n). Человек какую то хрень несет и не понятно, чего хочет, вариантов дали вагон и маленькую тележку
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736473
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesи не понятно, чего хочет

Странно у вас с пониманием... Я чего хотел давно получил, и проехал эту задачу. А вы тут все пишете, пишете, мне уведомления приходят, вот и я чтото пишу
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736476
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlтак что затраты времени на оптимизацию не окупятся. так, на будушее спросилДа, преждевременная оптимизация - зло, но это когда ты морочишься и выдумываешь новый код, а когда нужно просто использовать свойство вместо перечисления - это не оптимизация - это просто здравый смысл.

В Linq легко накосячить, устроив, например, цикл в цикле. Или замыкание на переменную цикла. Так что нужно четко понимать, что такое перечисление и как оно работает.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736477
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlмне уведомления приходят,Отпишишь. Зайдешь через полгодика, перечитаешь 20 страниц и норм.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736515
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Prom - это массив, не надо сувать Count(), где он не требуется

LINQ в этом плане оптимизирован - в своих потрохах он распознает что это массив и при вызове Count() не будет пересчитывать всю коллекцию, а сразу вызовет Length - сам проверял когда-то по исходникам.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736524
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatShocker.Prom - это массив, не надо сувать Count(), где он не требуется

LINQ в этом плане оптимизирован - в своих потрохах он распознает что это массив и при вызове Count() не будет пересчитывать всю коллекцию, а сразу вызовет Length - сам проверял когда-то по исходникам.это круто, но мое имхо в том, что не надо бы смешивать работу с массивами и коллекциями в один api.
Все таки не бейсик у нас.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736582
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Однако не выдает то, что надо. В первом измерении уже 4 каких-то объекта.

Каких-то объекта!


Итак (крещендо), четыре каких-то объекта:

[1,2,3]
[4,5,6]
[7,8,9]
[10]

Cat2Что мне еще местный гурии посоветую изучить?
Вот это деловой разговор.
Select и GroupBy уже осилены?
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39737031
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Агнец за бортомВот это деловой разговор.
Select и GroupBy уже осилены?
Нет пока. Я по алфавиту иду. Начал изучать Aggregate
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39737059
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Агнец за бортомКаких-то объекта!


Итак (крещендо), четыре каких-то объекта:

[1,2,3]
[4,5,6]
[7,8,9]
[10]

Пианиссимо, однако

4 и 5 в объекте first
6 - в объекте second. Добраться до них непросто
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39737065
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
iskatelsql Cat2,

result1 {1,2,3}{2,3,4}{3,4,5}
Вот это по нашему, по-пацански!
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39737087
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Обыкновенный функциональный подход.

С GroupBy самый изящный способ.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39737096
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Агнец за бортомCat2,

Обыкновенный функциональный подход.

С GroupBy самый изящный способ.
Вы мне напишите как после этого подхода получит второй элемент первого массива, из вычисленного result
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39737117
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Агнец за бортомCat2,

Обыкновенный функциональный подход.

С GroupBy самый изящный способ.
Вы мне напишите как после этого подхода получит второй элемент первого массива, из вычисленного result

Ты это... Серьезно? o_O
...
Рейтинг: 0 / 0
23 сообщений из 98, страница 4 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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