Он работает через инициализатор коллекции , который вызывает 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 #
Объект коллекции, к которому применяется инициализатор коллекции, должен иметь тип, который реализует
blockquote>System.Collections.IEnumerable
или возникает ошибка времени компиляции. Для каждого заданного элемента по порядку инициализатор коллекции вызывает метод Add на целевом объекте с списком выражений инициализатора элемента в виде списка аргументов, применяя нормальное разрешение перегрузки для каждого вызова. Таким образом, объект коллекции должен содержать применимый методAdd
для каждого инициализатора элемента.
$output = array();
foreach($input as $array){
$output[$array['Field-2']][] = $array['Field-1'];
}
ksort($output); // added as per additional requirement.
Поскольку вы не предоставили никакого кода вместе с вашим ответом, я нарисую его, который, я думаю, будет, по крайней мере, похож на то, что вы используете - это создает массив, проходит по каждой строке таблицы и добавляет элемент подмассива с ключом, который находится во втором столбце. Из-за того, что он добавляет новый элемент каждый раз, он не перезаписывает предыдущий.
$array = [];
foreach ($table as $row) {
$array[$row[1]][] = $row[0];
}
ksort($array); // Sorts the array so that the keys are in ascending order