我有一个对象列表(对象名称是NGramm),对象有一个属性 - 字符串列表(属性名称是RawNGramWords)。 RawNGramWords还有另一个属性 - NGramCount - 这是LIST中具有相同RawNGramWords的对象的数量(不同NGramm中相同的字符串列表)。因此,如果列表中有3个对象(NGramm)具有相同的RawNGramWords,我只需要获得一个NGrammm属性= 3的NGramm对象。应该从列表中删除具有相同RawNGramWords列表的其他2个对象。 我用了这段代码:
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 - 但总的来说由于速度慢而无关紧要 - 我需要另一种方法来在这些对象中找到相同的字符串列表)。 那么 - 有没有办法使用group by来计算具有相同List(RawNGramWords)和LINQ的对象? 谢谢
答案 0 :(得分:0)
此示例将List
NGramm
个RawNGramWords
个对象按Dictionary<string[], List<NGramm>>
属性分组到string[]
。
字典的键(RawNGramWords
)是NGramm
个对象的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());
:
sudo php bin/magento setup:static-content:deploy
在旁注中,您发布的代码正在执行一些我不完全理解其原因的事情(例如,重新迭代第一次迭代的尾部)。这减缓了它。