Введение краткости в C# / Java

IIUC возможен с merge, split, melt и concat:

dfB = dfB.merge(dfA, on='product')
dfB = pd.concat([dfB.iloc[:,:-1], dfB.tags.str.split(',', expand=True)], axis=1)
dfB = dfB.melt(id_vars=['customer', 'product']).drop(columns = ['product', 'variable'])
dfB = pd.concat([dfB.customer, pd.get_dummies(dfB['value'])], axis=1)
dfB

Выход:

   customer   filled sprinkles chocolate  glazed
0         A        0        0        1        0
1         C        0        0        1        0
2         A        0        0        1        0
3         A        0        0        1        0
4         B        0        0        1        0
5         B        0        0        1        0
6         C        0        0        0        1
7         C        0        0        0        1
8         A        0        1        0        0
9         C        0        1        0        0
10        A        0        1        0        0
11        A        1        0        0        0
12        B        1        0        0        0
13        B        1        0        0        0
7
задан rick schott 8 April 2009 в 17:33
поделиться

13 ответов

C # сохраняет на другом конце:

var listOfInts = new List<int>();
33
ответ дан 6 December 2019 в 04:44
поделиться

Java имеет

 List<String> data = newList(); //Java, where newList() is a helper method to create an ArrayList();
 List<String> data = newList("Hello", "World"); // a helper method which takes a T....
 Map<String, List<String>> anagrams = newMap(); // Java, where newMap creates a new  HashMap();
0
ответ дан 6 December 2019 в 04:44
поделиться

в C #, уже есть что-то вроде этого, а именно:

var listOfInts = new List<int>();
0
ответ дан 6 December 2019 в 04:44
поделиться

В Java это не имеет особого смысла, так как вы обычно объявляете переменные с типом интерфейса:

List<String> myList = new ArrayList<String>();

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

List<String> myList = new ArrayList();

Но поскольку Java всегда очень явна и многословна во всем, это может также остаться то же самое.

(И почему опять кто-нибудь может написать C # или Java без IDE?)

РЕДАКТИРОВАТЬ:

О, есть предложение для этого! Сладкий. Спасибо, Брайан.

0
ответ дан 6 December 2019 в 04:44
поделиться

В C # есть

var listOfInts = new List<int>();
2
ответ дан 6 December 2019 в 04:44
поделиться

Я согласен, что было бы неплохо. Лучшим примером может служить ситуация, когда требуется еще больше печатать:

Dictionary<string, int> myDictionary = new Dictionary<string, int>();

Жизнь была бы проще, хотя и незначительно, если бы ее можно было создать как:

Dictionary<string, int> myDictionary = new();

и:

Dictionary<string, int> myDictionary = { {"a",1}, {"b",2} };
2
ответ дан 6 December 2019 в 04:44
поделиться

Ваша версия менее читабельна, извините.

Код предназначен для чтения людьми, только случайно машинами.

4
ответ дан 6 December 2019 в 04:44
поделиться

В новых предложениях Java 7 есть предложение по выводу типов, которое облегчит жизнь. декларации дженериков.

Например,

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

и

Map<String, List<String>> anagrams = new HashMap<>();

См. здесь для получения дополнительной информации.

5
ответ дан 6 December 2019 в 04:44
поделиться

C # имеет:

var listOfInts = new List<int>();

, что позволяет добиться того же самого.

2
ответ дан 6 December 2019 в 04:44
поделиться

Как правило, при использовании объектно-ориентированных подходов вы часто создаете больше экземпляров более определенного типа, чем ваша переменная. Кроме того, часто рекомендуется использовать менее конкретный тип или интерфейс. В этих случаях это не имело бы смысла.

Подумайте об интерфейсах:

IList<int> = new(); // What instance should the compiler infer?

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

4
ответ дан 6 December 2019 в 04:44
поделиться

В C # 3 уже есть зеркальное отображение для локальных переменных, неявно набирая:

var listOfInts = new List<int>();

Этот не делает ' Тем не менее, он работает для нелокальных переменных .

В Java вывод типа учитывает цель назначения, поэтому при использовании статического импорта и хитрых библиотек, таких как Google Java Collections , вы можете написать код, такой как:

List<Integer> integers = newArrayList();

Обратите внимание, что это поддерживает переменную на основе интерфейса, в то же время определяя реализацию на стороне конструкции, что приятно.

14
ответ дан 6 December 2019 в 04:44
поделиться

Какие крайние случаи я мог бы пропустить?

Я кратко обсудил этот возможный синтаксис C # в своем блоге в январе. См. Комментарии к этому посту для получения отзывов читателей о плюсах и минусах синтаксиса.

Существуют ли другие способы сократить время создания экземпляров (без использования VB6-esque var) и при этом сохранить смысл?

Возможно, да.

"var" в C #, однако, не похож на "вариант" в VB6. «var» не означает то же самое, что и «объект», а также не вводит динамическую типизацию или типизацию по типу утиной. Это просто синтаксический сахар для , исключающий избыточное указание типа правой стороны .

16
ответ дан 6 December 2019 в 04:44
поделиться

В C # 3.0 есть механизм, позволяющий уменьшить дублирование при наборе текста, но это делается из-за расплывчатости типа «вы» объявляется, но явно в типе, который вы создаете:

например

var listOfInts = new List<int>();
2
ответ дан 6 December 2019 в 04:44
поделиться