C#, эквивалентный из Java IdentityHashMap

Прежде всего, вы не нарезаете 0-> 9, 10-> 19, 20-> 29; ваши кусочки продвигаются только на 1: 0-> 9, 1-> 10, 11-> 20. Вместо этого попробуйте следующее:

n = 32
size = 10
b = list(map(lambda x:np.arange(x, x+size), np.arange(0, n*size, size)))

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

Однако, как только вы опускаетесь ниже предела len(a), тогда numpy предполагают, что вы пытаетесь добавить многомерный срез в a: каждый элемент из b берется как срез в соответствующий размер a. Поскольку a является только одномерным, вы получите сообщение об ошибке. Ваш код будет работать в этом режиме с n=1, но не с n=2 и выше.

Хотя ваш вопрос не является дубликатом, см. Также этот .

11
задан mafu 8 May 2009 в 09:17
поделиться

1 ответ

Вы можете использовать RuntimeHelpers.GetHashCode (object) , который вызывает object.GetHashCode () не виртуально - это эквивалент System.identityHashcode на Java. Я думаю, это то, что вы после. Так что ваш IEqualityComparer просто использовал бы его для хеширования и object.ReferenceEquals для равенства.

18
ответ дан 3 December 2019 в 06:47
поделиться