Как сгруппировать один и тот же ключ в массив

Короткий ответ:

Он работает через инициализатор коллекции , который вызывает Add для добавления элементов

Длинный ответ:

Coding encodingly C # 3.0, объект, который реализует IEnumerable и имеет подходящий метод Add, может быть инициализирован методом Add.

Items имеет public get accessor и Items это List, который реализует IEnumerable и имеет Add. Вот как компилятор видит ваш код

var order = new Order();
order.Items.Add(new OrderItem());
order.Items.Add(new OrderItem());

Обратите внимание, что компилятор не использует информацию, которую List реализует IEnumerable, вот доказательство, никакое исключение не будет выбрано

public sealed class Order
{
    public Order()
    {
        Items = new MyCollection();
    }

    public MyCollection Items { get; private set; }
}

public sealed class OrderItem
{
}

public class MyCollection : IEnumerable
{
    private readonly List _items = new List();

    public void Add(OrderItem item)
    {
        _items.Add(item);
    }

    public IEnumerator GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

из спецификации языка C #

Объект коллекции, к которому применяется инициализатор коллекции, должен иметь тип, который реализует System.Collections.IEnumerable или возникает ошибка времени компиляции. Для каждого заданного элемента по порядку инициализатор коллекции вызывает метод Add на целевом объекте с списком выражений инициализатора элемента в виде списка аргументов, применяя нормальное разрешение перегрузки для каждого вызова. Таким образом, объект коллекции должен содержать применимый метод Add для каждого инициализатора элемента.

blockquote>
0
задан Sayed Mohd Ali 5 March 2019 в 11:44
поделиться

2 ответа

$output = array();
foreach($input as $array){
 $output[$array['Field-2']][] = $array['Field-1'];
}
ksort($output); // added as per additional requirement.
0
ответ дан Mohd Abdul Mujib 5 March 2019 в 11:44
поделиться

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

$array = [];
foreach ($table as $row) {
  $array[$row[1]][] = $row[0];
}
ksort($array); // Sorts the array so that the keys are in ascending order
0
ответ дан Keydose 5 March 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: