MapToДвойной эквивалент с C # Dictionary

== проверяет ссылки на объекты, .equals() проверяет строковые значения.

Иногда кажется, что == сравнивает значения, потому что Java делает некоторые закулисные вещи, чтобы убедиться, что одинаковые строки в строке являются одним и тем же объектом.

Для Например:

String fooString1 = new String("foo");
String fooString2 = new String("foo");

// Evaluates to false
fooString1 == fooString2;

// Evaluates to true
fooString1.equals(fooString2);

// Evaluates to true, because Java uses the same object
"bar" == "bar";

Но будьте осторожны с нулями!

== обрабатывает строки null в порядке, но вызов .equals() из пустой строки приведет к исключению:

String nullString1 = null;
String nullString2 = null;

// Evaluates to true
System.out.print(nullString1 == nullString2);

// Throws a NullPointerException
System.out.print(nullString1.equals(nullString2));

Итак, если вы знаете, что fooString1 может но не менее очевидно, что он проверяет значение null (из Java 7):

System.out.print(Objects.equals(fooString1, "bar"));
0
задан Andronicus 10 March 2019 в 17:07
поделиться

2 ответа

Похоже, согласно вашему описанию, у вас есть словарь некоторого ключа TKey и значение object.

var sampleDictionary = new Dictionary<TKey, object>();
... populate dictionary ...

Нас не волнуют ключи. Если ваши object типы экземпляров можно преобразовать в double с, то вы можете сделать несколько разных вещей:

// Perform a LINQ operation on the `Values` collection of the dictionary:
var sum = sampleDictionary.Values.Select(v => Convert.ToDouble(v)).Sum();

или

// Perform a LINQ operation directly on the dictionary
// Use this is if you might potentially need to incorporate TKey into your result
var sum = sampleDictionary.Select(d => Convert.ToDouble(d.Value)).Sum();

. к функции .Sum(), если хотите, чтобы сократить ее:

var sum = sampleDictionary.Values.Sum(v => Convert.ToDouble(v));

Или

var sum = sampleDictionary.Sum(d => Convert.ToDouble(d.Value));

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

Если ваш objects не может быть конвертирован в double, то сообщите нам об этом в комментарии, так как это придется немного реорганизовать.

0
ответ дан Cᴏʀʏ 10 March 2019 в 17:07
поделиться

Вы можете использовать Linq Sum(), чтобы получить сумму значений элементов словаря:

double sum = dict.Sum(d => d.Value);

Live Demo

0
ответ дан Ashkan Mobayen Khiabani 10 March 2019 в 17:07
поделиться