2016-03-24 39 views
0

我瞭解如何獲取每個值可能具有某個編號的列表的計數。例如,如果我想的次數的值「利斯塔」我會做下列等於1:c#如何根據另一個列表中的值使用LINQ獲取列表中的值的計數

int countOf1=ListA.Count(x => x ==1); 

如果我有幾個列表和我想要得到數組listB的計數,其中利斯塔是等於一些價值,我該如何修改上述命令來做到這一點?

爲了說明這個問題,我將在電子表格中展示一張這樣的圖片。在圖片中,您可以看到ListA和ListB將始終具有相同數量的值,因爲我希望每行的信息都是各種「觀察」。

我可以用循環做到這一點,但我希望我的腳本更簡單一些。我也意識到,對於這個例子,我可以得到ListA的數值,其值等於1.但是我將在未來想要做其他事情,比如ListB上的計算平均值,百分位數或其他聚合,其中ListA等於一些價值。

這可能嗎?

Picture of Lists

+0

澄清...對於每個「ListA [x] == 1」,您希望得到'ListB [x]'? –

+0

是的,最好的描述方式是如果我想要得到ListB WHERE ListA == 1中所有值的平均值。 – pelt

回答

2

因此,它看起來像你想要做的是加入一個名單列表上B.你不是在你的問題中指定的兩個列表應該如何加盟,但根據你的形象,我猜你想要通過索引來完成 - 即A [0]到B [0],A [1]到B [1]等。如果是這種情況,您可以使用Zip。然後,如果您想獲取B的平均值,例如A等於1,則可以執行以下操作:

ListA 
.Zip(
    ListB, 
    (a, b) => new { A = a, B = b }) 
.Where(x => x.A == 1) 
.Average(x => x.B); 
相關問題