C# имеет эквивалент Java статическим вложенным классом?

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

#!/usr/bin/env python
"""
$ cat data_shuffled.txt
0,2,7
1,4,7
0,4,7
1,9,0
1,2,5
0,6,7
1,6,8
0,9,5
"""
from itertools   import groupby
from operator    import itemgetter

# load the data and make sure it is sorted by the first column
sortby_key = itemgetter(0)
data = sorted((map(int, line.split(',')) for line in open('data_shuffled.txt')),
              key=sortby_key)

# group by the first column
grouped_data = []
for key, group in groupby(data, key=sortby_key):
    assert key == len(grouped_data) # assume the first column is 0,1, ...
    grouped_data.append([trio[1:] for trio in group])

# print the data
for i, pairs in enumerate(grouped_data):
    print i, pairs

Вывод:

0 [[2, 7], [4, 7], [6, 7], [9, 5]]
1 [[4, 7], [9, 0], [2, 5], [6, 8]]
20
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Посмотрите на это http://blogs.msdn.com/oldnewthing/archive/2006/08/01/685248.aspx

Я специально смотрю на

Другими словами, внутренние классы Java синтаксический сахар, который недоступен в C #. В C # это нужно делать вручную.

Если хотите, можете создать свой сахар:

 class OuterClass {
 ...
 InnerClass NewInnerClass () {
 вернуть новый InnerClass (это);
 }
 void SomeFunction () {
 InnerClass i = this.NewInnerClass ();
 i.GetOuterString ();
 }
}

Где вы хотите писать на Java новый o.InnerClass (...) вы можете написать в C # либо o.NewInnerClass (...), либо новый Внутренний класс (о, ...). Да это просто куча перестановок нового слова вокруг. Как я уже сказал, это просто сахар.

4
ответ дан 29 November 2019 в 22:34
поделиться

Вы можете иметь статический вложенный класс в C # в соответствии с Вложенными классами .

-1
ответ дан 29 November 2019 в 22:34
поделиться

Все вложенные классы C # подобны статическим вложенным классам Java:

C #:

class Outer
{
    class Inner
    {
    }
}

Похоже на Java:

class Outer
{
    static class Inner
    {
    }
}

Другими словами, экземпляр Inner не имеет неявной ссылки на экземпляр Outer .

Там нет эквивалент Java внутреннего класса в C #.

Однако правила доступности несколько различаются между двумя языками: в C # код во вложенном классе имеет доступ к закрытым членам в содержащем классе; в Java - наоборот.

75
ответ дан 29 November 2019 в 22:34
поделиться