我有型數組(叫他)和IEnumarable(叫他B):如何統計IEnumerable <int>中int []的每個數字存在多少次?
B - 1,2,4,8,289
A - 2,2,56,2,4,33,4,1,8,
我需要算多少次從A裏面乙存在於每個號碼和總結的結果。
例如:
B - 1,2,4,8,289
A - 2,2,56,2,4,33,4,1,8,
result = 1+3+2+1+0
什麼來實現它優雅的方式?
我有型數組(叫他)和IEnumarable(叫他B):如何統計IEnumerable <int>中int []的每個數字存在多少次?
B - 1,2,4,8,289
A - 2,2,56,2,4,33,4,1,8,
我需要算多少次從A裏面乙存在於每個號碼和總結的結果。
例如:
B - 1,2,4,8,289
A - 2,2,56,2,4,33,4,1,8,
result = 1+3+2+1+0
什麼來實現它優雅的方式?
隨着LINQ很容易:
int count = A
.Where(x => B.Contains(x))
.Count();
計數多少次元件從A被包含在B.
作爲尤瓦Itzchakov指出,這可以簡化如下:
int count = A.Count(x => B.Contains(x));
@Oliver你甚至可以縮短這個更多:'int count = A.Count(x => B.Contains(x));' –
但是這不是他所要求的嗎?他需要計算每個數字出現的次數 – Stilgar
@Stilgar:不,他的例子說「結果= 1 + 3 + 2 + 1 + 0」。所以他想要總數。 –
我需要數ho從B內部的A中每次都存在多次,並對結果進行求和。
您可以同時獲得數量和金額如下
List<int> b = new List<int>() { 1,2,4,8,289 };
List<int> a = new List<int>() { 2,2,56,2,4,33,4,1,8 };
var subset = a.Where(i => b.Contains(i));
var count = subset.Count(); // 7
var sum = subset.Sum(); // 23
注意,我重複使用相同的LINQ表達式來獲得這兩個數和金額。
可能會試圖使用HashSet<int>
代替List<int>
,因爲.Contains操作速度更快。但是,HashSet是一個集合,這意味着如果多次添加相同的數字,那麼只有該數字的一個副本將保留在集合中。
隨着Linq
你可以像這樣
var B = new List<int>{ 1, 2, 4, 8, 289 };
var A = new List<int> { 2, 2, 56, 2, 4, 33, 4, 1, 8 };
var repetitionSum = B.Select(b => A.Count(a => a == b)).Sum(); //result = 7
如果你願意,你可以得到這樣
var repetition = B.Select(b => A.Count(a => a == b)).ToList();
// { 1, 3, 2, 1, 0 }
甜蜜和簡單..一行方案中,各重複列表
爲什麼不試試呢..
int sum = 0;
A.ToList().ForEach(a=>sum +=B.Count(b=>b==a));
Console.Write(sum);
可以sweap的A/B它仍然可以工作
目前尚不清楚,如果你想知道每個數字或最終計數(你的文字和你的示例代碼不同)的發生。這裏是獲得每個數字出現次數的代碼
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int[] a = new []{1,2,3};
int[] b = new []{1,2,2,3};
Dictionary<int, int> aDictionary = a.ToDictionary(i=>i, i => 0);
foreach(int i in b)
{
if(aDictionary.ContainsKey(i))
{
aDictionary[i]++;
}
}
foreach(KeyValuePair<int, int> kvp in aDictionary)
{
Console.WriteLine(kvp.Key + ":" + kvp.Value);
}
}
}
您是否需要計算每個數字出現的次數或您需要的最終總數? – Stilgar
您要麼計算B中每個數字出現在A中的次數,要麼您的數字集標記不正確。 – juharr