簡體   English   中英

使用LINQ按列表中對象的屬性對列表中的對象進行分組

[英]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 NGrammDictionary<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM