[英]Group objects in List by property in object that is List using LINQ
我有一個對象列表(對象名稱是NGramm),對象有一個屬性-字符串列表(屬性名稱是RawNGramWords)。 RawNGramWords的另一個屬性-NGramCount-是LIST中具有相同RawNGramWords(不同NGramm中相同的字符串列表)的對象數。 因此,例如,如果列表中有3個具有相同RawNGramWords的對象(NGramm),我只需要獲得一個具有NGramCount屬性= 3的NGramm對象。其他2個具有相同RawNGramWords列表的對象應從列表中刪除。 我使用以下代碼:
public static List<NGramm> CountNWordsInNGrams(List<NGramm> listOfNgramms)
{
List<int> indexesOfNGramsInListToDelete = new List<int>();
for(int i = 0; i < listOfNgramms.Count; i++)
{
for(int j = i+1; j < listOfNgramms.Count; j++)
{
bool areEquivalent = !listOfNgramms[i].RawNGramWords.Except(listOfNgramms[j].RawNGramWords).Any();
if(areEquivalent == true)
{
indexesOfNGramsInListToDelete.Add(i);
listOfNgramms[j].NGramCount = listOfNgramms[j].NGramCount + listOfNgramms[i].NGramCount + 1;
}
}
}
for (int i = listOfNgramms.Count; i >= 0; i--)
{
if (indexesOfNGramsInListToDelete.Contains(i))
{
listOfNgramms.RemoveAt(i);
}
}
return listOfNgramms;
}
此方法的速度非常慢。 (它將NGramCount計數為錯誤-但總的來說,由於速度慢而沒有關系-我需要另一種方法來在這些對象中找到相同的字符串列表)。 那么-有什么方法可以使用分組依據對LINQ中具有相同列表(RawNGramWords)的對象進行計數? 謝謝
此示例將按其RawNGramWords
屬性將NGramm
對象的List
NGramm
為Dictionary<string[], List<NGramm>>
。
字典的鍵( string[]
)是NGramm
對象的RawNGramWords
屬性。
假設您的NGramm
類看起來像這樣:
class NGramm
{
public string[] RawNGramWords;
public int NGramCount;
}
您可以使用List<NGramm>
來做到這一點:
List<NGramm> listOfNgramms;
Dictionary<string[], List<NGramm>> groupedResults = (from ngramm in listOfNgramms
group ngramm by ngramm.RawNGramWords
into groupedNGramms
select groupedNGramms).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
附帶一提,您發布的代碼正在做一些我不完全理解其原因的事情(例如,重復第一遍的結尾)。 這減慢了它的速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.