Вы можете использовать map
для перебора вложенных массивов, а затем использовать Math.min(...array)
для каждого, чтобы получить минимум. Вывод из map
представляет собой массив минимальных значений.
const arr = [[4, 8, 2], [7, 6, 42], [41, 77, 32, 9]];
const out = arr.map(a => Math.min(...a));
console.log(out);
Я раньше использовал много макросов в VS 2002/2003. Одним примером было бы создание региона - мне всегда нравится, когда мои классы разделены на следующие регионы - "Члены парламента, не занимающие официального поста", "Общественные собственности", "Открытые методы" и "Закрытые методы". Так, мне отобразили макрос на сочетание клавиш, которое создает эти регионы в любом новом файле класса.
поддержка Рефакторинга в VS 2005/2008 (и средство добавления общих фрагментов кода), а также использование Дополнений как DXCore и SlickEdit позволяет мне работать, не имея необходимость создавать слишком многих макросы больше.
Я использую Jeff макросы FormatToHtml , если я собираюсь быть вставкой примера кода в сообщение в блоге или электронного письма.
Я отобразил ctrl-shift-G на макрос, который генерирует GUID в формате реестра - это полезно для редактирования IDL
Вставьте GUID, большой для работы WiX, добавьте к меню как кнопка или как ключевой ярлык.
Sub InsertGuid()
Dim objTextSelection As TextSelection
objTextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
objTextSelection.Text = System.Guid.NewGuid.ToString.ToUpper(New System.Globalization.CultureInfo("en", False))
End Sub
Организуйте использования для всех .cs файлов в решении - Исходный Автор: djpark.
Sub OrganizeSolution()
Dim sol As Solution = DTE.Solution
For i As Integer = 1 To sol.Projects.Count
OrganizeProject(sol.Projects.Item(i))
Next
End Sub
Private Sub OrganizeProject(ByVal proj As Project)
For i As Integer = 1 To proj.ProjectItems.Count
OrganizeProjectItem(proj.ProjectItems.Item(i))
Next
End Sub
Private Sub OrganizeProjectItem(ByVal projectItem As ProjectItem)
Dim fileIsOpen As Boolean = False
If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
'If this is a c# file
If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
'Set flag to true if file is already open
fileIsOpen = projectItem.IsOpen
Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
window.Activate()
projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")
'Only close the file if it was not already open
If Not fileIsOpen Then
window.Close(vsSaveChanges.vsSaveChangesYes)
End If
End If
End If
'Be sure to apply RemoveAndSort on all of the ProjectItems.
If Not projectItem.ProjectItems Is Nothing Then
For i As Integer = 1 To projectItem.ProjectItems.Count
OrganizeProjectItem(projectItem.ProjectItems.Item(i))
Next
End If
'Apply RemoveAndSort on a SubProject if it exists.
If Not projectItem.SubProject Is Nothing Then
OrganizeProject(projectItem.SubProject)
End If
End Sub
Я добавляю кнопки на панели инструментов для следующих 3 макросов. Каждый возьмет в настоящее время выделенный текст в любом файле и погуглит его (или MSDN - он или spell-check-it). Составьте изящный значок для панели инструментов для дополнительных точек стиля.
Private Const BROWSER_PATH As String = "C:\Program Files\Mozilla Firefox\firefox.exe"
Sub SearchGoogle()
Dim cmd As String
cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
Shell(cmd, AppWinStyle.NormalFocus)
End Sub
Sub SearchMSDN()
Dim cmd As String
cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}+site%3Amsdn.microsoft.com", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
Shell(cmd, AppWinStyle.NormalFocus)
End Sub
Sub SpellCheck()
Dim cmd As String
cmd = String.Format("{0} http://www.spellcheck.net/cgi-bin/spell.exe?action=CHECKWORD&string={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
Shell(cmd, AppWinStyle.NormalFocus)
End Sub
Я работаю с парными мониторами, и я нахожу переключающий расположение макрос Sharon (от 1 монитора до 2 расположений монитора) полностью неоценимым. Когда необходимо ссылаться на веб-страницу или другую программу при введении небольшого количества кода, Ctrl-Alt-1 для переключения на одно расположение монитора для окон Visual Studio. После того как Вы сделаны, Ctrl-Alt-2, чтобы переключиться на Ваши два расположения монитора и вернуть все Ваши окна.Потрясающе!
http://www.invisible-city.com/sharon/2008/06/workstation-hack-visual-studio-on-2.html
Я не мог позволить этому вопросу обойтись без помощи упоминания этого. Это даже имеет видео, чтобы показать, как установить и использовать его. Этот макрос просто позволяет Вам создавать вложенные файлы в проводнике решения (как resources.resx).
Править: Обновленный ссылка
Я очень часто использую следующие менее известные сочетания клавиш:
Показывать начальную страницу после закрытия решения (но не закрывать Visual Studio)
Поместите этот код в свой модуль EnvironmentEvents:
Private Sub SolutionEvents_AfterClosing() Handles SolutionEvents.AfterClosing
DTE.ExecuteCommand("View.StartPage")
End Sub
Скрыть начальную страницу после открытия решения
Поместите этот код в свой модуль EnvironmentEvents:
Private Sub SolutionEvents_Opened() Handles SolutionEvents.Opened
Dim startPageGuid As String = "{387CB18D-6153-4156-9257-9AC3F9207BBE}"
Dim startPage As EnvDTE.Window = DTE.Windows.Item(startPageGuid)
If startPage IsNot Nothing Then startPage.Close()
End Sub
Эти два вместе заставят вашу стартовую страницу скрываться, когда вы открываете решение. Когда вы закрываете решение, стартовая страница возвращается.
Схема: свернуть до определений, но расширить регионы
Вы работаете в одном из тех магазинов, которые настаивают на регионах вокруг всего , так что, когда вы свертываете до определений, вы не видите никакого кода?
Что вам действительно нужно, так это макрос «свернуть в определения, но расширять регионы», как этот:
Sub CollapseToDefinitionsButExpandAllRegions()
DTE.ExecuteCommand("Edit.CollapsetoDefinitions")
DTE.SuppressUI = True
Dim objSelection As TextSelection = DTE.ActiveDocument.Selection
objSelection.StartOfDocument()
Do While objSelection.FindText("#region",
vsFindOptions.vsFindOptionsMatchInHiddenText)
Loop
objSelection.StartOfDocument()
DTE.SuppressUI = False
End Sub
Поместите это в обычный макромодуль, назначьте его горячей клавише, и ваш код вернется.
(Кроме ... если вы работаете с некоторыми действительно гнусными людьми, которые помещают регионы в методы , это, к сожалению, расширит эти методы. Если кто-нибудь знает способ написать это, чтобы избежать этого, не стесняйтесь редактировать.)
Показать продолжительность сборки в выходном окне
Поместите этот код в модуль EncreendEvents. Это будет писать продолжительность непосредственно в окно сборки для любого действия на решении (сборка, восстановление, чистое, развертывание).
Вы можете изменить функцию IsBuild, чтобы указать действия, для которых вы хотите увидеть эту информацию.
Dim buildStart As Date
Private Function IsBuild(ByVal scope As EnvDTE.vsBuildScope, ByVal action As EnvDTE.vsBuildAction) As Boolean
Return scope = vsBuildScope.vsBuildScopeSolution
End Function
Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
If (IsBuild(Scope, Action)) Then
buildStart = Date.Now
End If
End Sub
Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
If (IsBuild(Scope, Action)) Then
Dim buildTime = Date.Now - buildStart
WriteToBuildWindow(String.Format("Build time: {0}", buildTime.ToString))
End If
End Sub
Private Sub WriteToBuildWindow(ByVal message As String)
Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
Dim ow As OutputWindow = CType(win.Object, OutputWindow)
For Each owPane As OutputWindowPane In ow.OutputWindowPanes
If (owPane.Name.Equals("Build")) Then
owPane.OutputString(message)
Exit For
End If
Next
End Sub
Свернуть все узлы панели решений, очень полезно, особенно для больших проекты:
Public Module CollapseAllNodes
Sub RunCollapseAllNodes()
Dim UIHSolutionExplorer As UIHierarchy
UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()
' Check if there is any open solution
If (UIHSolutionExplorer.UIHierarchyItems.Count = 0) Then
Return
End If
' Get the top node (the name of the solution)
Dim UIHSolutionRootNode As UIHierarchyItem
UIHSolutionRootNode = UIHSolutionExplorer.UIHierarchyItems.Item(1)
CloseRecursif(UIHSolutionRootNode)
' Select the solution node, or else when you click
' on the solution windows scrollbar, it will synchronize the open document
' with the tree and pop out the corresponding node which is probably not
' what you want.
UIHSolutionRootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
End Sub
Function CloseRecursif(ByRef element)
For Each UIHChild In element.UIHierarchyItems()
CloseRecursif(UIHChild)
If (UIHChild.UIHierarchyItems.Expanded = True) Then
UIHChild.UIHierarchyItems.Expanded = False
End If
Next
End Function
End Module