2016-11-15 4 views
-1

У меня есть два массива:, как суммировать значения дублированного элемента в массиве

string[] fruit = { "apple", "banana", "lemon", "apple", "lemon" }; 
int[] quantity = { 2,   4,  1,  2,  2 }; 

Вторая имеют ту же длину первого, и целые числа являются количеством каждого плода.

Я хочу, чтобы создать эти два массива:

totalefruit = { "apple", "banana", "lemon" }; 
totalquantity = {4,   4,  3} 
+2

В чем конкретный вопрос? –

+1

Вы что-то пробовали? Хотите показать? – rbm

+2

Почему у вас есть 2 массива для хранения этих значений? Вы должны взглянуть на «Словарь » – RandomStranger

ответ

2

Попробуйте это:

string[] fruit = { "apple", "banana", "lemon", "apple", "lemon" }; 
int[] quantity = { 2, 4, 1, 2, 2 }; 

var result = 
    fruit 
     .Zip(quantity, (f, q) => new { f, q }) 
     .GroupBy(x => x.f, x => x.q) 
     .Select(x => new { Fruit = x.Key, Quantity = x.Sum() }) 
     .ToArray(); 

var totalefruit = result.Select(x => x.Fruit).ToArray(); 
var totalquantity = result.Select(x => x.Quantity).ToArray(); 

result выглядит следующим образом:

result

+0

Да! Это то что мне нужно. Спасибо –

2

Вы можете использовать Zip и поиск :

var fruitQuantityLookup = fruit 
    .Zip(quantity, (f, q) => new { Fruit = f, Quantity = q }) 
    .ToLookup(x => x.Fruit, x => x.Quantity); 
string[] totalefruit = fruitQuantityLookup.Select(fq => fq.Key).ToArray(); 
int[] totalquantity = fruitQuantityLookup.Select(fq => fq.Sum()).ToArray(); 
+0

Это работает! спасибо –

Смежные вопросы