Вы можете использовать нотацию понимания списка , чтобы преобразовать ваш массив в матрицу. Вот так
some_list[start:end:step]
def transform(li):
rows = len(li) // 10
return [li[i:len(li):rows] for i in range(rows)]
arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4']
['A', 'D', 'G', 'J', 'M', 'P', 'S', 'V', 'Y', '2']
['B', 'E', 'H', 'K', 'N', 'Q', 'T', 'W', 'Z', '3']
['C', 'F', 'I', 'L', 'O', 'R', 'U', 'X', '1', '4']
[1122 ] «сгущенная» часть здесь - это li[i:len(li):rows]
, поэтому давайте объясним, что
i
внутри []
относится к началу подмассива len(i)
является концом подмассива rows
является шагом . Здесь шаг равен числу строк, так как мы хотим перейти на количество строк, чтобы соответствовать ожидаемому результату в вашем вопросе Мы извлекаем подмассив для каждая возможная строка, которая является то, что [... for i in range(rows)]
для
Я придумал ответ на второй вопрос. Мне был нужен ItemsControl, поддерживающий прокрутку, и мне нужно было иметь элементы в Grid, а не в StackPanel по умолчанию. Чтобы выполнить оба требования, я использовал ControlTemplate:
<!--In the resources...-->
<ControlTemplate x:Key="GraphTemplate" TargetType="ItemsControl">
<ScrollViewer Name="ScrollViewer"
Padding="{TemplateBinding Padding}"
HorizontalScrollBarVisibility="Auto">
...
<Grid Name="Panel" IsItemsHost="True"
Background="{TemplateBinding ItemsControl.Background}"/>
...
</ScrollViewer>
</ControlTemplate>
<!--Later...-->
<ItemsControl x:Name="_itemsControl"
ItemsSource="{Binding Items}"
Template="{StaticResource GraphTemplate}"
Background="LightYellow"/>
Чтобы получить события мыши с осмысленными координатами мыши (то есть координатами в прокручиваемом пространстве), необходимо было получить ссылку на сетку с помощью странного заклинания:
Grid grid = (Grid)_itemsControl.Template.FindName("Panel", _itemsControl);
Затем вы присоединяете обработчики событий к сетке, а внутри обработчиков событий мыши получите координаты мыши относительно сетки, используя
Point p = e.GetPosition((IInputElement)sender);
. Чтобы получить события мыши на всей поверхности, элемент управления (фактически сетка) должен иметь фон, поэтому Я установил Background = "LightYellow" выше, который распространяется на сетку через привязку в ControlTemplate.
Я нашел способ обрабатывать события, вызванные объектами в DataTemplate.
(1) присоедините обработчики событий к ItemsControl
<ItemsControl x:Name="_itemsControl"
Thumb.DragStarted="Node_DragStarted"
Thumb.DragDelta="Node_DragDelta"
Thumb.DragCompleted="Node_DragCompleted"
MouseDoubleClick="OnMouseDoubleClick"
.../>
(2), чтобы узнать, к какому элементу относится событие, обработайте OriginalSource как FrameworkElement и получите его DataContext:
void Node_DragStarted(object sender, DragStartedEventArgs e)
{
var os = (FrameworkElement)e.OriginalSource;
var vm = os.DataContext as ItemViewModel;
if (vm != null)
// do something with the item ViewModel
}
Да, задача массовой вставки SSIS использует те же функции подчеркивания, что и команда BULK INSERT.
Скорее всего, вы заметите различия в профилировщике SQL, потому что задача массовой вставки будет использовать подчеркивание COM-объекта напрямую (что обеспечивает массовую вставку), а не просто быть оболочкой графического интерфейса пользователя для команды T-SQL. Так что вместо указания FROM, я предполагаю, что он передает указатель открытого потока ввода-вывода в COM-объект.
Массовая вставка в значительной степени является самым быстрым способом загрузки большого количества данных в SQL Server, поскольку она выполняется внутри процесса », разделяют одно и то же адресное пространство памяти. Поскольку файлы данных открываются процессом SQL Server, данные не копируются между клиентским процессом и процессами SQL Server ». 1
Однако производительность будет отличаться, если файл находится в та же машина, что и SQL Server, или нет.
ViewModel должен быть отключен от GUI, чтобы он ничего не знал об элементах управления или щелчках мыши.
Два варианта:
У Беа Столльниц есть пример перетаскивания под названием «Как я могу перетаскивать элементы между элементами ItemsControls с привязкой к данным?». Я бы выложил ссылку, но StackOverflow мне не позволяет.
Возможно, вы захотите разделить обратную связь пользовательского интерфейса во время перетаскивания и действия, выполняемого, когда оно окончательно отбрасывается.
Однако я согласен с Томасом и Кэмероном выше. Вы захотите ограничить смешивание / сопоставление обработки событий и привязки данных. Если вы идете по маршруту обработки событий, возможно, вы не захотите избегать использования термина «модель представления» для своих объектов, поскольку он обычно обозначает альтернативу привязки данных.