Visual Studio - Автоматически обновляет представление класса при изменении класса

Это просто упражнение по программированию, но вы можете попробовать что-то вроде этого:

import org.apache.spark.sql.{DataFrame, Column}
import org.apache.spark.sql.types.{StructType, StructField}
import org.apache.spark.sql.{functions => f}
import scala.util.Try

case class DFWithDropFrom(df: DataFrame) {
  def getSourceField(source: String): Try[StructField] = {
    Try(df.schema.fields.filter(_.name == source).head)
  }

  def getType(sourceField: StructField): Try[StructType] = {
    Try(sourceField.dataType.asInstanceOf[StructType])
  }

  def genOutputCol(names: Array[String], source: String): Column = {
    f.struct(names.map(x => f.col(source).getItem(x).alias(x)): _*)
  }

  def dropFrom(source: String, toDrop: Array[String]): DataFrame = {
    getSourceField(source)
      .flatMap(getType)
      .map(_.fieldNames.diff(toDrop))
      .map(genOutputCol(_, source))
      .map(df.withColumn(source, _))
      .getOrElse(df)
  }
}

Пример использования:

scala> case class features(feat1: String, feat2: String, feat3: String)
defined class features

scala> case class record(label: String, features: features)
defined class record

scala> val df = sc.parallelize(Seq(record("a_label",  features("f1", "f2", "f3")))).toDF
df: org.apache.spark.sql.DataFrame = [label: string, features: struct]

scala> DFWithDropFrom(df).dropFrom("features", Array("feat1")).show
+-------+--------+
|  label|features|
+-------+--------+
|a_label| [f2,f3]|
+-------+--------+


scala> DFWithDropFrom(df).dropFrom("foobar", Array("feat1")).show
+-------+----------+
|  label|  features|
+-------+----------+
|a_label|[f1,f2,f3]|
+-------+----------+


scala> DFWithDropFrom(df).dropFrom("features", Array("foobar")).show
+-------+----------+
|  label|  features|
+-------+----------+
|a_label|[f1,f2,f3]|
+-------+----------+

Добавить неявное преобразование , и вам хорошо идти.

38
задан WillH 13 February 2009 в 14:26
поделиться

9 ответов

С Resharper ALT+SHIFT+L переходит к текущему файлу в Проводнике Решения.

0
ответ дан David Kemp 10 October 2019 в 07:17
поделиться

Меню инструментов-> Опции

Затем в области "Project And Solutions", можно выбрать для отслеживания активного объекта.

0
ответ дан David Kemp 10 October 2019 в 07:17
поделиться

Прибытие из Eclipse Вы пропустите много таких функций. То, что я пропускаю больше всего для навигации, является легким , переходят к типу , , переходят к наследнику и т.д. Другими функциями, такими как поддержка nUnit не является часть ванильной Visual Studio, также. Вот список Дополнений, которые устраняют разрыв:

, Но здесь прибывает недостаток: они все заряжают Вас деньги (TestDriven.net только для коммерческого использования). Однако они все предлагают бесплатные демонстрационные версии.

0
ответ дан olli-MSFT 10 October 2019 в 07:17
поделиться

Я не знаю ни о каких способах сделать это, но я соглашаюсь, что это была бы хорошая функция.

можно отследить объекты в Проводнике Решения хотя (Опции-> Проект и Решения-> Общий-> Дорожка Активный Объект в Проводнике Решения).

0
ответ дан Jakob Christensen 10 October 2019 в 07:17
поделиться

Я не могу помочь Вам с представлением класса, но возможно Вы хотите дать проводнику решения попытку? Можно синхронизировать этого через:

tools -> options -> projects and solutions -> general
enable "track active item in solution explorer"
10
ответ дан tanascius 10 October 2019 в 07:17
поделиться

Для Visual Studio 2005

я нашел решение, которое не обновляет представление автоматически, но по крайней мере вы получаете контекстная запись, которая помогает:

http://blogs.msdn.com/ansonh/archive/2005/12/09/502020.aspx

Вы также можете определить сочетание клавиш:

Сервис-> Параметры -> Среда-> Клавиатура и посмотрите, сможете ли вы найти «View.SynchronizeClassView».


О, просто для смеха - вот ответ Microsoft: http://msdn.microsoft.com/en-us/library/2dae8h2s.aspx

... вы можете выбрать любой символ в редакторе кода и найдите его мгновенно ...

После 7 шагов ...

"Представление классов автоматически прокручивает в местоположение выбранного символа in its hierarchy. "

18
ответ дан 27 November 2019 в 03:29
поделиться

У меня еще не было времени, чтобы заставить это работать, но есть код для надстройки VS2003 / 2005 для автосинхронизации здесь (см. Сообщение помечен как «ответ»).

Между прочим, этот вопрос кажется дубликатом этого .

1
ответ дан 27 November 2019 в 03:29
поделиться

на основе ответа kingmaxxx я обнаружил, что вы можете добавить кнопку на свою панель инструментов, чтобы сделать то же самое:

Инструменты | Настройка -> Команды [вкладка] -> Просмотр [Категории]

Захватите кнопку «Синхронизировать представление классов» и перетащите его на одну из панелей инструментов.

2
ответ дан 27 November 2019 в 03:29
поделиться

After reading kingmaxxx's reply, I went to Tools->Options->Environment->Keyboard and bound Ctrl+Shift+C to View.SynchronizeClassView in Text Editor view. This seems to supplant and supplement the original behavior (View.ClassView), as it will display ClassView if it wasn't visible and focus on the current class.

(Visual Studio 2008)

43
ответ дан 27 November 2019 в 03:29
поделиться